Jak mogę otworzyć wiele plików używając opcji "z open" w Pythonie?
Chcę zmienić kilka plików na raz, iff mogę napisać do wszystkich. Zastanawiam się, czy jakoś mogę połączyć wiele otwartych wywołań z with
stwierdzeniem:
try:
with open('a', 'w') as a and open('b', 'w') as b:
do_something()
except IOError as e:
print 'Operation failed: %s' % e.strerror
Jeśli nie jest to możliwe, jak wyglądałoby eleganckie rozwiązanie tego problemu? 5 answers
Od Pythona 2.7 (lub odpowiednio 3.1) możesz napisać
with open('a', 'w') as a, open('b', 'w') as b:
do_something()
We wcześniejszych wersjach Pythona można czasami użyć
contextlib.nested()
zagnieżdżanie menedżerów kontekstu. Nie będzie to jednak działać zgodnie z oczekiwaniami przy otwieraniu plików wielokrotności -- szczegóły można znaleźć w połączonej dokumentacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-02 23:30:43
Wystarczy zamienić and
na ,
i gotowe:
try:
with open('a', 'w') as a, open('b', 'w') as b:
do_something()
except IOError as e:
print 'Operation failed: %s' % e.strerror
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-06 16:20:42
Do otwierania wielu plików naraz lub długich ścieżek plików, przydatne może być dzielenie rzeczy na wiele linii. Z Python Style Guide {[3] } Jak zasugerował @Sven Marnach w komentarzach do innej odpowiedzi:
with open('/path/to/InFile.ext', 'r') as file_1, \
open('/path/to/OutFile.ext', 'w') as file_2:
file_2.write(file_1.read())
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-25 19:44:03
Zagnieżdżone ze stwierdzeniami wykonają tę samą pracę i moim zdaniem są prostsze w obsłudze.
Powiedzmy, że masz inFile.txt, i chce to zapisac na dwa outFile ' y jednoczesnie.with open("inFile.txt", 'r') as fr:
with open("outFile1.txt", 'w') as fw1:
with open("outFile2.txt", 'w') as fw2:
for line in fr.readlines():
fw1.writelines(line)
fw2.writelines(line)
EDIT:
Nie rozumiem powodu negatywnej opinii. Przetestowałem mój kod przed opublikowaniem odpowiedzi i działa zgodnie z życzeniem: pisze do wszystkich outFile ' ów, tak jak zadaje pytanie. Brak duplikatu zapisu lub brak zapisu. Więc jestem naprawdę ciekaw, dlaczego mój odpowiedź jest uważana za błędną, nieoptymalną lub coś w tym stylu.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-15 22:57:11
W Pythonie 2.6 to nie zadziała, musimy użyć poniższego sposobu, aby otworzyć wiele plików:
with open('a', 'w') as a:
with open('b', 'w') as b:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-02 05:38:54