如何通过文件列表循环迭代工具?

Posted

技术标签:

【中文标题】如何通过文件列表循环迭代工具?【英文标题】:How to loop itertools through a list of files? 【发布时间】:2018-04-27 03:52:06 【问题描述】:

我设法为单个文件创建此文件以切分文件中的行。我只想取奇数。

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)

我的错误是什么?似乎它缺少循环。

【问题讨论】:

您遇到的错误是什么? 为什么要在a+ 模式下打开文件只是为了从中读取?这意味着你总是什么也不读。在添加循环之前,您并没有在原始代码中这样做。 没有错误。但是文件没有被分割。所以我认为循环可能有问题。因为当调试打印“文件”时,列表是空的。 @abarnert 哦,我的错。它弄乱了复制和粘贴。我现在编辑它。但结果还是一样。 “文件没有被分割”是什么意思?你能把它减少到minimal reproducible example——可能是两个 5 行的输入文件,以及预期的和实际的输出吗?当我们甚至不知道问题是什么时,真的没有办法调试问题。 【参考方案1】:

如果我错了,请纠正我,但来自 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)

【讨论】:

这就是我想要的。感谢朋友的帮助:) 我已经修复了上面代码的小问题。

以上是关于如何通过文件列表循环迭代工具?的主要内容,如果未能解决你的问题,请参考以下文章

迭代,列表,字典,文件迭代

Python案例详解Python文件迭代的方法

迭代器

使用for循环从数组迭代到列表

python_如何在一个for循环中迭代多个可迭代对象?

避免在 React 渲染循环中进行每次迭代绑定