在 python 中一次读取多个文件
Reading multiple files at once in python
我在 python 中编写了一段代码,它读取文件的单个列并根据 if/else 将输出作为 'P' 或 'R'我给的条件。我想更改它,使其在获得第一个 P 或 R 时停止读取文件并将其打印为输出。另外,我有上千个这样的文件,所以我每次 运行 都必须不断更改文件名。任何人都可以更改此代码,以便我可以立即 运行 它并获得所有文件的输出吗?所有这些文件都在同一个目录中,并且这些是目录中唯一的文件。谁能告诉我如何存储或打印相应文件的输出?
f = open('/home/abc/xyz/coord/coord_348.xvg')
dat = f.readlines()
dat1 = dat[22:len(dat)]
dat2=[]
for k in dat1:
dat2.append(k.split())
res=[]
for k in dat2:
if float(k[1])>=9.5:
print('P')
res.append
elif float(k[1])<=5.9:
print('R')
res.append
else:
res.append
print(res)
所以您最初可以像这样简化循环:
with open("file.xvg", "r") as f:
for i, line in enumerate(f):
if i < 22:
# Skip up to line 22
continue
line = line.strip().split()
# It isn't clear what you want to append to `res`
if float(line[1]) >= 9.5:
print("P")
break
elif float(line[1]) <= 5.9:
print("R")
break
else:
print("N")
这会解析文件,而不是将其读入列表并解析列表。 break
语句使您脱离文件循环。
如果目录中有很多文件,您可以像这样阅读它们:
from pathlib import Path
for file in Path("/path/to/directory").rglob("*.xvg"):
with file.open("r") as f:
for i, line in enumerate(f):
# Same logic as above
pass
我在 python 中编写了一段代码,它读取文件的单个列并根据 if/else 将输出作为 'P' 或 'R'我给的条件。我想更改它,使其在获得第一个 P 或 R 时停止读取文件并将其打印为输出。另外,我有上千个这样的文件,所以我每次 运行 都必须不断更改文件名。任何人都可以更改此代码,以便我可以立即 运行 它并获得所有文件的输出吗?所有这些文件都在同一个目录中,并且这些是目录中唯一的文件。谁能告诉我如何存储或打印相应文件的输出?
f = open('/home/abc/xyz/coord/coord_348.xvg')
dat = f.readlines()
dat1 = dat[22:len(dat)]
dat2=[]
for k in dat1:
dat2.append(k.split())
res=[]
for k in dat2:
if float(k[1])>=9.5:
print('P')
res.append
elif float(k[1])<=5.9:
print('R')
res.append
else:
res.append
print(res)
所以您最初可以像这样简化循环:
with open("file.xvg", "r") as f:
for i, line in enumerate(f):
if i < 22:
# Skip up to line 22
continue
line = line.strip().split()
# It isn't clear what you want to append to `res`
if float(line[1]) >= 9.5:
print("P")
break
elif float(line[1]) <= 5.9:
print("R")
break
else:
print("N")
这会解析文件,而不是将其读入列表并解析列表。 break
语句使您脱离文件循环。
如果目录中有很多文件,您可以像这样阅读它们:
from pathlib import Path
for file in Path("/path/to/directory").rglob("*.xvg"):
with file.open("r") as f:
for i, line in enumerate(f):
# Same logic as above
pass