Как перебрать itertools через список файлов? - PullRequest
0 голосов
/ 27 апреля 2018

Мне удается создать это для одного файла, чтобы разделить строку в файле. Я хотел бы взять только нечетное число.

filename = sys.argv[1]
filename2 = sys.argv[2]

with open(filename) as f:
    items = itertools.islice(f, 0, None, 2)

    x = (list(items))
    final = "".join(x)

with open(filename2, 'a+') as bb:
    bb.write(final)

Над кодом работает нормально. Но мне нужно указать имя файла вручную. Что если бы у меня было 100 файлов, которые мне нужно нарезать?

Пример вывода кода выше. Он нарезает / удаляет строку по четному числу.

Input file
a
b
c
d
e

Output file
a
c
e

Я думаю о петле. Пока вот мое решение.

# Directory where it contains my pat files.
mydir = "C:\\Users\\Desktop\\Scripts\\"
files = filter(lambda x: x.endswith('.pat'), os.listdir(mydir))

# print(list(files))
# ['filepat1.pat', 'filepat2.pat', 'filepat3.pat'.......]

i = 0
new_file = 'file{}.pat'.format(i)

for file in files:
    with open(file) as f:
       items = itertools.islice(f, 0, None, 2)
       x = (list(items))
       final = "".join(x)
       #print(final)
       for item in items:
           i +=1
           new_file = 'file{}.pat'.format(i)
           with open(new_file, 'a+') as ww:
               ww.write(final)

В чем моя ошибка? Похоже, он пропустил петлю.

1 Ответ

0 голосов
/ 27 апреля 2018

Поправьте меня, если я ошибаюсь, но код из for item in items: выглядит странно. Насколько я понимаю, вы пытаетесь извлечь нечетные строки из одного файла и сохранить их в новом файле, верно?

Вы можете переписать так:

mydir = "C:\\Users\\Desktop\\Scripts\\"
files = filter(lambda x: x.endswith('.pat'), os.listdir(mydir))

#print(list(files))

for i, file in enumerate(files):
    with open(file) as f:
       items = itertools.islice(f, 0, None, 2)
       x = (list(items))
       final = "".join(x)
       #print(final)

       new_file = 'file{}.pat'.format(i)
       with open(new_file, 'a+') as ww:
           ww.write(final)
...