簡體   English   中英

如何通過文件列表循環itertools?

[英]How to loop itertools through a list of files?

我設法為單個文件創建此文件,以將文件中的行切成薄片。 我只想取奇數。

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)

我怎么了 好像它缺少循環。

如果我錯了,請糾正我,但是for item in items:的代碼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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM