Чтение нескольких файлов одновременно в python - PullRequest
1 голос
/ 30 марта 2020

Я написал код в python, который считывает один столбец файла и выдает вывод в виде «P» или «R» в зависимости от условия if / else, которое я дал. Я хочу изменить его так, чтобы он прекратил чтение файла в тот момент, когда он получает первые 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)

1 Ответ

0 голосов
/ 30 марта 2020

Таким образом, вы можете упростить ваш l oop изначально так:

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 выводит вас из файла l oop через файл.

Если у вас в каталоге много файлов, вы можете прочитать их следующим образом:

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
...