Obecnie próbuję napisać funkcję przejść przez żądany katalog i wydrukować cały tekst wszystkich plików.

W tej chwili funkcja działa na wyświetlaniu nazwisk plików jako listy, aby pliki z pewnością istnieją (i jest tekst w plikach).

def PopularWordWalk (starting_dir, word_dict):
    print ("In", os.path.abspath(starting_dir))
    os.chdir(os.path.abspath(starting_dir))
    for (this_dir,dir_names,file_names) in os.walk(starting_dir):
        for file_name in file_names:
            fpath = os.path.join(os.path.abspath(starting_dir), file_name)
            fileobj = open(fpath, 'r')
            text = fileobj.read()
            print(text)

Oto moje wyjście z pewnym sprawdzaniem zawartości katalogów:

>>> PopularWordWalk ('text_dir', word_dict)

In /Users/normanwei/Documents/Python for Programmers/Homework 4/text_dir

>>> os.listdir()
['.DS_Store', 'cats.txt', 'zen_story.txt']

Problem polega na tym, kiedy próbuję wydrukować tekst, nic nie dostanę. W końcu chcę nacisnąć tekst przez inne funkcje, ale na razie wydaje się, że nie ma żadnego tekstu. Czy ktoś może pożyczyć wszelkie doświadczenia, dlaczego nie pojawia się tekst? (Podczas próby otwierania tekstu plików / odczytywania / przechowywania i drukowania ręcznie w biegu jałowym działa tj. Jeśli po prostu ręcznie wprowadziłem "kota.

Edytuj - Odpowiedziano pytanie - wystarczy usunąć linię os.chdir - patrz odpowiedź jojo na wyjaśnienie.

1
Norman Wei 14 sierpień 2014, 03:28

4 odpowiedzi

Najlepsza odpowiedź

Jeśli zrobisz os.chdir(os.path.abspath(starting_dir)) przejdź do start_dir . Następnie for (this_dir,dir_names,file_names) in os.walk(starting_dir): pętla się nad niczym, ponieważ start_dir nie jest w start_dir .

Krótko mówiąc, skomentuj linię os.chdir(os.path.abspath(starting_dir)) i powinieneś być dobry.

Alternatywnie, jeśli chcesz trzymać się os.chdir, powinno to wykonać zadanie:

def PopularWordWalk (starting_dir, word_dict):
    print ("In", os.path.abspath(starting_dir))
    os.chdir(os.path.abspath(starting_dir))
    for (this_dir,dir_names,file_names) in os.walk('.'):
        for file_name in file_names:
            fpath = os.path.join(os.path.abspath(starting_dir), file_name)
            with open(fpath, 'r') as fileobj:
                text = fileobj.read()
            print(text)
2
jojo 14 sierpień 2014, 00:21

Ta linia nie działa

file = open(file_name, 'r')

Ponieważ wymagałoby to, aby te pliki były istniały w tym samym folderze, z którego uruchomisz skrypt. Musisz podać ścieżkę do tych plików, a także nazwy plików

with open(os.path.join(starting_dir,file_name), 'r') as file:
    #do stuff

W ten sposób zbuduje pełną ścieżkę z katalogu i nazwy pliku.

4
jojo 13 sierpień 2014, 23:44

Będziesz chciał dołączyć do ścieżki głównej za pomocą ścieżki plików. Zmieniłbym się:

file = open(file_name, 'r')

Do

fpath = os.path.join(this_dir, file_name)
file = open(fpath, 'r')

Możesz także użyć innego słowa, aby opisać to niż file, ponieważ to jest a Wbudowana funkcja w Pythonie. Polecam fileobj.

2
Kevin London 13 sierpień 2014, 23:41

Aby dodać do poprzedniej odpowiedzi, będziesz musiał dołączyć do absolutnej ścieżki i względnej ścieżki spaceru.

Spróbuj tego:

fpath = os.path.abspath(os.path.join(this_dir, file_name))
f = open(fpath, 'r')
1
ashwinjv 14 sierpień 2014, 00:18