python - enumerate(fileinput.input(file)) 和 enumerate(file) 的区别

标签 python file-io enumerate

我正在为我的代码寻求一些帮助,如下所示:

for file in file_name :
    if os.path.isfile(file):
        for line_number, line in enumerate(fileinput.input(file, inplace=1)):
            print file
            os.system("pause")
            if line_number ==1:
                line = line.replace('Object','#Object')
                sys.stdout.write(line)

我想修改一些以前提取的文件,以便用 matplotlib 绘制它们。为此,我删除了一些行,评论了一些其他行。

我的问题如下:

  • 使用 for line_number, line in enumerate(fileinput.input(file, inplace=1)): 只给我 5 个先前提取的文件中的 4 个(当查看 file_name 列表时包含 5引用!)

  • 使用 for line_number, line in enumerate(file): 给我之前提取的 5 个文件,但我不知道如何在不创建另一个文件的情况下使用同一个文件进行修改...

您对这个问题有什么想法吗?这是正常问题吗?

最佳答案

有许多事情可能对您有所帮助。

首先 file_name 似乎是一个文件名列表。将它命名为 file_names 可能更好,然后您可以为每个文件使用 file_name。您已验证这确实包含 5 个条目。

enumerate() 函数用于在枚举项目列表时提供帮助,以便为每个循环提供索引和项目。这使您不必使用单独的计数器变量,例如

for index, item in enumerate(["item1", "item2", "item3"]):
    print index, item

将打印:

0  item1
1  item2
2  item3

这并不是真正需要的,因为您已选择使用 fileinput 库。这旨在获取文件列表并在一个循环中遍历所有文件中的所有行。因此,您需要稍微调整一下您的方法,假设您的文件列表被称为 file_names 然后您编写如下内容:

# Keep only files in the file list
file_names = [file_name for file_name in file_names if os.path.isfile(file_name)]

# Iterate all lines in all files
for line in fileinput.input(file_names, inplace=1):
    if fileinput.filelineno() == 1:
        line = line.replace('Object','#Object')
        sys.stdout.write(line)  

这里的要点是最好在将列表传递给 fileinput 之前预过滤任何非文件名。我将由您来修复输出。

fileinput 提供了许多函数来帮助您确定当前正在处理的文件或行号。

关于python - enumerate(fileinput.input(file)) 和 enumerate(file) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31006251/

相关文章:

ios - 为什么我的正则表达式中存在多个捕获组会使我的应用程序崩溃?

python - 迭代字典(字典内)来总结排名

python - 根据特定列值将数据集拆分为两组行 [python,unix]

python - 如何在 python 中使用 NaN 值规范化数据

objective-c - 在 Cocoa 中,如何将文件的行结尾更改为 LF?

Java:从 InputStream 读取并不总是读取相同数量的数据

python - wxPython检查c++部分是否被删除

python - 无法使用 python rasterio、gdal 打开 jp2 (来自哨兵)

python - 将二进制数据写入稀疏文件的中间

python - 如何在 Python 中对元组列表进行 enumerate()?