Tworzę nowe pliki z oryginalnie istniejących w folderze mdp, zmieniając kilka wierszy w tych plikach za pomocą Pythona. Muszę to zrobić dla 1000 plików. Czy ktoś może zasugerować pętlę for, która odczytuje wszystkie pliki i zmienia je oraz tworzy nowe za jednym razem?
W ten sposób muszę zmienić liczbę, po której następuje 'md_' w ścieżce i jest to żmudne, ponieważ jest tutaj 1000 plików.
Próbowałem użyć str (), ale wystąpił błąd „nie można odczytać pliku”
fin = open("/home/abc/xyz/mdp/md_1.mdp", "rt")
fout = open("/home/abc/xyz/middle/md_1.mdp", "wt")
for line in fin:
fout.write(line.replace('integrator = md', 'integrator
= md-vv'))
fin = open("/home/abc/xyz/middle/md_1.mdp", "rt")
fout = open("/home/abc/xyz/mdb/md_1.mdp", "wt")
for line in fin:
fout.write(line.replace('dt = 0.001', 'dt
= -0.001'))
fin.close()
fout.close()
2 odpowiedzi
os.listdir(path)
jest Twoim przyjacielem:
import os
sourcedir = "/home/abc/xyz/mdp"
destdir = "/home/abc/xyz/middle"
for filename in os.listdir(sourcedir):
if not filename.endswith(".mdp"):
continue
source = os.path.join(sourcedir, filename)
dest = os.path.join(destdir, filename)
# with open(xxx) as varname makes sure the file(s)
# will be closed whatever happens in the 'with' block
# NB text mode is the default, and so is read mode
with open(source) as fin, open(dest, "w") as fout:
# python files are iterable... avoids reading
# the whole file in memory at once
for line in fin:
# will only work for those exact strings,
# you may want to use regexps if number of
# whitespaces vary etc
line = line.replace("dt = 0.001", "dt = -0.001")
line = line.replace(
'integrator = md',
'integrator = md-vv'
)
fout.write(line)
Zakładając, że chcesz edytować wszystkie pliki znajdujące się w folderze mdp, możesz zrobić coś takiego.
import os
dir = "/home/abc/xyz/mdp/"
for filename in os.listdir(dir):
with open(dir + filename, "r+") as file:
text = file.read()
text = text.replace("dt = 0.001", "dt = -0.001")
file.seek(0)
file.write(text)
file.truncate()
Spowoduje to przejrzenie każdego pliku i zmianę go za pomocą str.replace ().
Jeśli w folderze mdp znajdują się inne pliki, których nie chcesz edytować, możesz użyć instrukcji i if-statement, aby sprawdzić poprawną nazwę pliku. Dodaj coś takiego, aby zamknąć instrukcję open .
if filename.startswith("md_")
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.