【问题标题】:for loops on text files文本文件上的 for 循环
【发布时间】:2012-12-19 19:13:40
【问题描述】:

我正在编写一个庞大的代码,我需要它做的一件小事就是检查一个分为不同行的文本文件。 每次该行为空时,我都需要它来创建一个新的行列表。例如,如果文本是:(每个数字都是一个新行)

1 2 3 4

5 6 3

1 2

它应该构建 3 个不同的列表:[1,2,3,4], [5,6,3], [1,2]

这是我目前的代码(刚刚开始):

    new_list=[]
    my_list=[]
    doc=open(filename, "r")
    for line in doc:
            line=line.rstrip()
            if line !="":
                    new_list.append(line)
    return new_list

【问题讨论】:

  • 关于@jdi的评论,您可以了解更多how/why to accept answers from this link
  • @jdi 对不起,我不知道该怎么做,我是新来的.. 谢谢 - 完成 :)
  • @Yarden:谢谢!不用担心。很好,你想通了。让人们更愿意提供帮助!

标签: python list filenames


【解决方案1】:

好的,现在应该可以了:

initial_list, temp_list = [], []
for line in open(filename):
    if line.strip() == '':
        initial_list.append(temp_list)
        temp_list = []
    else: temp_list.append(line.strip())
if len(temp_list) > 0: initial_list.append(temp_list)
final_list = [item for item in initial_list if len(item) > 0]
print final_list

【讨论】:

  • 你能解释一下当行为空时它是如何开始一个新列表的吗?
  • if line.strip() != '' 使其仅在该行不为空时才添加到列表中
  • 我明白你现在在说什么了,这段代码对此不起作用。给我一秒钟,我看看我能不能让它工作
  • @Yarden 现在试试这个代码,它应该可以工作。我用一个文件对其进行了测试,它似乎可以正常工作。
  • 哦,我的错,我又读了你的整个问题。对不起,等一下,我会尝试修复它
【解决方案2】:

你可以这样做:

[x.split() for x in fileobject if x.strip()]

要获取整数,您可以使用map:

[map(int,x.split()) for x in fileobject if x.strip()]

其中fileobjectopen 返回的对象。这可能最好在上下文管理器中执行:

with open(filename) as fileobject:
     data_list = [map(int,x.split()) for x in fileobject if x.strip()]

阅读其他帖子上的一些cmets,似乎我也没有正确理解您的问题。这是我纠正它的尝试:

with open(filename) as fileobject:
    current = []
    result = [current]
    for line in fileobject:
        if line.strip(): #Non-blank line -- Extend current working list.
            current.extend(map(int,line.split()))
        else:  #blank line -- Start new list to work with
            current = []
            result.append(current)

现在您的结果列表应该包含在result 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2017-12-14
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多