在Python中读取文件时出现问题
我有一个文件:Alus.txt 文件内容:(新行中的每个名称) 马格斯 米克尔 丹尼尔 标记 朱丽 胜利者 马雷克 尼古拉 帕维尔 卡尔 问题:当程序读取此文件时,每个名称后面都有在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
\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问题,他会把所有的名字都列在一个列表中,这样你的解决方案就会非常好。