【问题标题】:writing a filtered list to a file in python将过滤列表写入python中的文件
【发布时间】:2019-03-11 00:19:19
【问题描述】:

我正在尝试根据某些条件从文件创建列表,然后过滤这些项目并将它们写入另一个文件。我有以下,但新文件是空的。

def readlinesfromfilecriteria(filename, criteria = ['M','S','T']):
    fd =open(filename)
    lines = fd.readlines()
    filteredlines = []
    fd.close()
    for l in lines:
        if l[0] in criteria:
            filteredlines.append(l)
    return filteredlines
    fd=open('2015PopEstimateSubset.csv','w')
    fd.write(filteredlines.sort)
    fd.close

readlinesfromfilecriteria("2015PopEstimatesComplete.csv")

【问题讨论】:

  • 您在 closesort 上缺少括号。仔细检查文档以了解您正在使用的功能。
  • 缩进已修复。我没有收到任何错误,只是写了一个空白文件。如果你看不出来,我对 python 很陌生

标签: python python-3.x file output


【解决方案1】:

在你开始写任何东西之前你先做return。重新排列你的代码来解决这个问题,很可能你想在写入后移动returnsort() 也没有返回任何东西,而是就地排序,所以你的 write() 是有道理的。您需要使用sorted() 或对列表进行排序然后写入。

您还应该使用with ... 语法进行文件访问或添加适当的错误处理。

所以你很可能想要这个:

def readlinesfromfilecriteria(filename, criteria = ['M','S','T']):
    with open(filename) as fd:
        lines = fd.readlines()

    filteredlines = [l for l in lines if l[0] in criteria]
    with open('2015PopEstimateSubset.csv','w') as fd:
        fd.write(sorted(filteredlines))

readlinesfromfilecriteria("2015PopEstimatesComplete.csv")

【讨论】:

  • 你认为他的readlinesfromfilecriteria 函数应该以写入新文件结束??
  • 谁知道呢。这是如此低质量的代码,我不会感到惊讶。但是,是的,这就是我认为他所拥有的,尽管有这个名字。您可以在发布时拧紧缩进,但顺序保持不变,所以对我来说,他有一个函数和调用行。还有大量的错误:)
  • 是的,其目的是写入一个仅包含以条件开头的行的新文件。我已经修复了帖子中的缩进。我知道编码质量很低,我对这一切都非常陌生。
  • 哈,你看到了吗? :)
  • 但这太糟糕了。说“不,你拿错了——这就是你在自己的脚上开枪时拿着枪的方式!”似乎是不负责任的!
【解决方案2】:

您应该拨打filteredlines.sort(),然后拨打filteredlines: fd.write(line)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多