【问题标题】:Problem with reading file in PythonPython中读取文件的问题
【发布时间】:2010-10-31 11:06:57
【问题描述】:

我有一个文件:Alus.txt

文件内容:(每个名字换行)

马格斯

米克尔

丹尼尔

标记

朱里

维克多

马雷克

尼古拉

帕维尔

卡勒

问题:当程序读取此文件时,每个名称后都有\n['Margus\n', 'Mihkel\n', 'Daniel\n', 'Mark\n', 'Juri\n', 'Victor\n', 'Marek\n', 'Nikolai\n', 'Pavel\n', 'Kalle'])。我怎样才能删除\n 并有一个名字列表?我做错了什么?谢谢。

alus = []

file = open('alus.txt', 'r')

while True:

    rida = file.readline()

    if (rida == ''):

        break

    else:

        alus.append(rida)

【问题讨论】:

  • 附注,如果文件很大,您可能需要查看 fileinput 模块

标签: python list file


【解决方案1】:

您可以使用rstrip 删除换行符:

alus = []
with open('alus.txt', 'r') as f:
    for rida in f:
        rida=rida.rstrip()
        if rida: alus.append(rida)
        else: break

顺便说一句,测试字符串是否为空的常用方法是

if not rida:

而不是

if (rida == ''):

如果你有一个if...else 块,你应该考虑非否定形式:

if rida:

因为它通常更容易阅读和理解。

编辑:我之前关于删除break 的评论是错误的。 (我把breakcontinue 弄错了。)因为break 停止了循环,所以需要保留它以保留原始代码的行为。

编辑 2: A.L. Flanagan 正确地指出 rstrip 删除所有尾随空格,而不仅仅是结束换行符。如果您只想删除换行符,可以使用 A.L. Flanagan 的方法,或者将您希望删除的字符作为参数列出给 rstrip

rida = rida.rstrip(r'\r\n')

【讨论】:

    【解决方案2】:
    alnus = [l.rstrip() for l in open('alus.txt', 'r')]
    

    【讨论】:

      【解决方案3】:

      open('alus.txt').read().splitlines()

      【讨论】:

      • 虽然标记为答案的响应是正确且信息丰富的,但这是更 Pythonic 的方式。
      • @max 仅仅因为以后可能会出现不寻常的情况而抢先引入类似 java 的复杂性是没有意义的。如果是这样,这就是 python:删除一行并编写替换代码。简单更好。
      • @twneale 我删除了我之前的评论,因为我提供了错误的 URL。我的评论是您的方法会将整个文件加载到内存中;它也不允许对行进行任何处理。我推荐this approach。为了回答您的评论,我同意您的观点,除非您需要,否则额外的复杂性是不值得的。如果我从字面上理解 OP 问题,他无论如何都会将所有名称放入一个列表中,因此您的解决方案将非常有效。
      【解决方案4】:

      rstrip() 的一个可能问题是它会删除任何空格。如果要保留空格,可以使用切片:

      if line.endswith('\n'):
          line = line[:-1]
      

      如果您可以确定所有行都以“\n”结尾,则可以通过删除 if 来加快速度。但是,一般来说,您不能确定文本文件中的最后一行是否有换行符。

      【讨论】:

      • "Slices" 在这里不是一个很好的解决方案 - 如果您只关心 gettign 摆脱 "\n",请将 "\n" 作为参数传递给 rstrip。
      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 2019-12-22
      相关资源
      最近更新 更多