【问题标题】:Python: Appending file outputs from different directories into one overall listPython:将来自不同目录的文件输出附加到一个整体列表中
【发布时间】:2018-04-19 01:55:59
【问题描述】:

我有 n 个目录(标记为 0 到 n),每个目录都有一个文件(所有文件都具有相同的名称),我想从中获取每个文件中的某些行。然后我想将这些抓取的行按顺序(从 0 到 n)附加到一个列表中。

这是我的设置:

for i in range(0, nfolders):
    folder = "%02d" % i
    os.system("cd " + folder)

    myFile = open("myOutputFile", "r")
    lines = myFile.readlines()
    firstLine = float(lines[0])

    #I then write a loop to store the next 5 lines in a list using append and call this list nextLines

我的问题是,有没有一种简单的方法可以将所有目录中的 firstLine 附加到一个列表中(我的函数返回),以及将所有目录中的 nextLines 附加到一个列表中(同样,我的函数返回)?

我知道有扩展功能,我可以在这里循环吗(因为假设我有 nfolders = 300,很难手动添加东西)?

谢谢!

【问题讨论】:

标签: python list io append


【解决方案1】:

你有几个问题要处理。 os.system 更改子shell 调用的工作目录(然后立即退出),但不更改此运行脚本的目录。为此使用os.chdir。或者,更好的是,只需将路径添加到文件名并使用它。

您无需阅读整个文件即可获得其第一行,.readlinenext() 函数会为您完成这项工作。最后,只需附加到一个列表。

my_list = []

for i in range(0, nfolders):
    filename = "%02d/MyOutputFile" % i
    with open(filename) as myFile:
        firstLine = float(next(myFile))
        my_list.append(firstLine)

更新

假设您想要每个文件中的4 + i 行。你可以把它收紧

my_list = []

for i in range(0, nfolders):
    filename = "%02d/MyOutputFile" % i
    with open(filename) as myFile:
        my_list += (next(myFile) for _ in range(4+i))

请注意,我们只使用range 来计算迭代次数,并不关心它的值,因此我们使用变量_ 作为不需要该值的快速可视队列。

【讨论】:

  • 谢谢!但是,如果我想要 myFile 中的一组行“nextLines”,我该怎么办?基本上,我想从每个目录的 myFile 中抓取 4 到 18 行(抓取的行数增加 i)。我是否会类似地将它们附加到 with open 命令中,然后将所有列表附加在一起?
  • 您可以通过firstLines = [next(myFile) for dummy in range(4, 4+i)] 获取多行以获取行列表。 (我只是猜测你想如何做范围)。然后您可以使用my_list.append(firstLines) 来创建列表列表,或者使用my_list.extend(firstLines) 将新行添加到列表中。
  • 谢谢!因此,如果您想在每个目录中获取多行,然后将它们全部附加在一起以形成一个大列表,那么使用 my_list.extend 而不是 my_list.append 是否更有意义?
  • 是的,extend 将单个项目从一个列表添加到另一个列表。使用extend 的另一种方法是使用+=。因此,在打开之后,您可以执行 my_list += (next(myFile) for _ in range(4, 4+i)) 并完全跳过中间的 firstLine 列表。
  • 我明白了 - 感谢您的帮助和清晰的解释 :)!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多