在Python中读取文件时出现问题

在Python中读取文件时出现问题,python,list,file,Python,List,File,我有一个文件: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

文件内容:(新行中的每个名称)

马格斯

米克尔

丹尼尔

标记

朱丽

胜利者

马雷克

尼古拉

帕维尔

卡尔

问题:当程序读取此文件时,每个名称后面都有
\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)

可以使用以下方法删除换行符:

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

if not rida:
而不是

if (rida == ''):

如果你有一个<代码>如果……否则代码>块,你应该考虑非否定形式:

if rida:
因为它通常更容易阅读和理解

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

edit2:正确地指出,
rstrip
删除了所有尾随空格,而不仅仅是结尾的换行符。如果只想删除换行符,可以使用A.L.Flanagan的方法,或将要删除的字符作为参数列出到
rstrip

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

可以使用以下方法删除换行符:

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

if not rida:
而不是

if (rida == ''):

如果你有一个<代码>如果……否则代码>块,你应该考虑非否定形式:

if rida:
因为它通常更容易阅读和理解

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

edit2:正确地指出,
rstrip
删除了所有尾随空格,而不仅仅是结尾的换行符。如果只想删除换行符,可以使用A.L.Flanagan的方法,或将要删除的字符作为参数列出到
rstrip

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

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

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

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

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

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

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

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

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

侧注,如果文件较大,您可能需要签出
fileinput
moduleside注意,如果文件较大,您可能需要签出
fileinput
module“Slices”在这里是一个很好的解决方案-如果您必须只关心GetSign rid of“\n”,请将“\n”作为参数传递给do rstrip。“Slices”在这里是一个很好的解决方案-如果您必须只关心GetSign rid of“\n”,请传递“\n”“作为一个参数do rstrip。虽然标记为答案的响应是正确且信息丰富的,但这是一种更具python风格的方式。@max仅仅因为以后可能会出现不寻常的情况,就先发制人地引入类似java的复杂性是没有意义的。如果是这样的话,这就是python:删除一行并编写替换代码。简单更好。@t因为我提供了错误的URL,所以我删除了我以前的评论。我的意见是,您的方法将在内存中加载整个文件;它也不允许对行进行任何处理。我推荐。为了回答你的评论,我同意你的观点,除非你需要,否则额外的复杂性是不值得的。如果我按字面理解OP问题,他会把所有的名字都放在一个列表中,这样你的解决方案就可以很好地工作。虽然标记为答案的回答是正确的和信息丰富的,但这是一种更具python风格的方式。@max仅仅因为以后可能会出现不寻常的情况,就先发制人地引入类似java的复杂性是没有意义的。如果是这样的话,这就是python:删除一行并编写替换代码。简单更好。@t因为我提供了错误的URL,所以我删除了我以前的评论。我的意见是,您的方法将在内存中加载整个文件;它也不允许对行进行任何处理。我推荐。为了回答你的评论,我同意你的观点,除非你需要,否则额外的复杂性是不值得的。如果我逐字逐句地回答OP问题,他会把所有的名字都列在一个列表中,这样你的解决方案就会非常好。