【问题标题】:Reading multiple files at once in python在python中一次读取多个文件
【发布时间】:2020-07-10 21:12:27
【问题描述】:

我在 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)

【问题讨论】:

  • 这能回答你的问题吗? Python: How to read all files in a directory
  • @Alex,这个答案并没有完全回答我的问题,因为它没有告诉我一旦我在我的问题中提到的 R 或 P 后如何停止读取文件。

标签: python for-loop file-read


【解决方案1】:

所以你可以像这样简化你的循环:

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

【讨论】:

  • 我如何存储知道哪个文件给出了什么输出? @亚历克斯
  • 那是file 变量。请参阅pathlib docs
  • 这给了我一个错误:elif float(line[1])
  • 这是您正在运行的代码的问题,很可能是缩进错误。
  • 你能建议我解决吗?我是编程新手,无法弄清楚。
猜你喜欢
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多