2013-08-22 13 views
9

Potrzebuję otworzyć plik z innego katalogu bez używania jego ścieżki podczas pobytu w bieżącym katalogu.Otwórz wszystkie pliki w różnych pythonach katalogu

Kiedy wykonać poniższy kod:

for file in os.listdir(sub_dir): 
    f = open(file, "r") 
    lines = f.readlines() 
    for line in lines: 
     line.replace("dst=", ", ") 
     line.replace("proto=", ", ") 
     line.replace("dpt=", ", ") 

pojawia się komunikat o błędzie FileNotFoundError: [Errno 2] No such file or directory: ponieważ był on w podkatalogu.

Pytanie: Czy istnieje komenda os mogę użyć, które zlokalizować i otworzyć plik w sub_dir?

Dzięki! - Jeśli wiem, że to jest powtórzenie, sprawdziłem i nie mogłem go znaleźć, ale mogłem go nie zauważyć.

+0

trzeba dodać ścieżkę sub_dir do pliku w funkcji open(), aby móc go otworzyć. –

Odpowiedz

11

os.listdir() zawiera tylko nazwę nazwę pliku bez ścieżki. Poprzedzić je z sub_dir ponownie:

for filename in os.listdir(sub_dir): 
    f = open(os.path.join(sub_dir, filename), "r") 

Jeśli wszystko robisz jest pętla na linii z pliku, po prostu pętli nad samym pliku; przy użyciu with upewnia się, że plik zostanie zamknięty dla ciebie, kiedy to zrobisz. Last but not least, str.replace()powraca nową wartość ciągu, nie zmienia samej wartości, więc trzeba przechowywać tę wartość powrotu:

for filename in os.listdir(sub_dir): 
    with open(os.path.join(sub_dir, filename), "r") as f: 
     for line in f: 
      line = line.replace("dst=", ", ") 
      line = line.replace("proto=", ", ") 
      line = line.replace("dpt=", ", ") 
+0

Jeśli chciałem napisać nową linię do 'nazwy pliku', czy dodaję' f.write (linię) 'i otworzy się w trybie' a'? – hjames

+0

@hjames: Oczywiście, po prostu dostosuj parametr 'mode' wywołania' open() '. –

+0

Hmm, jeśli ustawię go w trybie 'a' lub' w', zwróci błąd, że plik nie jest czytelny. Jeśli umieściłem go w trybie "r", oczywiście nie można zapisać do pliku. – hjames

10

Musisz podać pełną ścieżkę, jeśli pliki te nie są w prądzie katalog:

f = open(os.path.join(sub_dir, file)) 

nie użyłbym file jako nazwy zmiennej, może filename, ponieważ jest on używany do utworzenia obiektu pliku w Pythonie.

-1

Kod skopiować pliki za pomocą shutil

import shutil 
import os 

source_dir = "D:\\StackOverFlow\\datasets" 
dest_dir = "D:\\StackOverFlow\\test_datasets" 
files = os.listdir("D:\\StackOverFlow\\datasets") 

if not os.path.exists(dest_dir): 
    os.makedirs(dest_dir) 

for filename in files: 
    if file.endswith(".txt"): 
     shutil.copy(os.path.join(source_dir, filename), dest_dir) 

print os.listdir(dest_dir) 
Powiązane problemy