从文本文件中读取行后python代码中的索引器
有人能告诉我这个python代码出了什么问题吗?它看起来很傻,因为代码很简单,但我是一个编码初学者,希望可以理解从文本文件中读取行后python代码中的索引器,python,python-3.x,Python,Python 3.x,有人能告诉我这个python代码出了什么问题吗?它看起来很傻,因为代码很简单,但我是一个编码初学者,希望可以理解 f = open("countries.txt", "r") countries = [] for line in f: line = line.strip() countries.append(line) f.close() print(countries) print(len(countries)) for country in countries:
f = open("countries.txt", "r")
countries = []
for line in f:
line = line.strip()
countries.append(line)
f.close()
print(countries)
print(len(countries))
for country in countries:
if country[0] == "T":
print(country)
我不断得到以下错误:
line 16, in <module>
if country[0] == "T":
IndexError: string index out of range
第16行,在
如果国家[0]=“T”:
索引器错误:字符串索引超出范围
如果国家[0]=“T”:
如果国家长度为零,则将崩溃。如果文件包含完全空白的行,则可能会发生这种情况
在添加到国家/地区时,尝试过滤掉空行:
for line in f:
line = line.strip()
if line:
countries.append(line)
如果国家[0]=“T”:
如果国家长度为零,则将崩溃。如果文件包含完全空白的行,则可能会发生这种情况
在添加到国家/地区时,尝试过滤掉空行:
for line in f:
line = line.strip()
if line:
countries.append(line)
因为Kavin已经帮助您解决了问题,所以我只编写了一些代码来做同样的事情,但更像Python代码。
这是一种更具python风格的代码编写方式:
with open('countries.txt', 'r') as f:
countries = list(filter(lambda c: c.startswith('T'), (line.strip() for line in f.readlines())))
print(countries)
因为Kavin已经帮助您解决了问题,所以我只编写了一些代码来做同样的事情,但更像Python代码。
这是一种更具python风格的代码编写方式:
with open('countries.txt', 'r') as f:
countries = list(filter(lambda c: c.startswith('T'), (line.strip() for line in f.readlines())))
print(countries)
输入中有空行吗?关于错误,您不了解什么?你在寻求什么样的帮助?我敢打赌,一个被分配了相同作业的小组正在研究这个问题。这样一个“我在我的问题上投入了很低的努力”的问题,一个非常非常简单的答案,不可能在答案上得到3次即时的赞成票。你输入的任何空白行?你对错误有什么不理解?你在寻求什么样的帮助?我敢打赌,一个被分配了相同作业的小组正在研究这个问题。这样一个“我在我的问题上投入了很低的努力”的问题,用一个非常非常简单的答案,不可能在解决问题的答案上获得3张即时的赞成票。但这很奇怪,因为我还试图剥离第一个“for”循环下的空白行。这里的要点是,我们需要使用if语句来确保引擎盖下面不会隐藏任何空行。执行line=line.strip()
不会确保line
从不为空,也不会确保将空行追加到国家或地区“”.strip()
只会为您提供“”
。问题已解决。但这很奇怪,因为我还试图剥离第一个“for”循环下的空白行。这里的要点是,我们需要使用if语句来确保引擎盖下面不会隐藏任何空行。执行line=line.strip()
不会确保line
从不为空,也不会确保将空行追加到国家或地区<代码>“”.strip()
只会给你“”
过滤器实际上,随着时间的推移,人们越来越不认为它像蟒蛇。如今,人们通常更倾向于使用列表理解。与其过滤(f,seq)
,不如执行[x代表x,如果f(x)]
。该语言的作者,最初。@Kevin,是的,使用过滤器更像是函数式编程。使用过滤器也有它自己的优点,它生成一个生成器,而不是一个列表。当我谈到Pythonic时,实际上我指的是使用“with”语句,非常感谢您指出这一点。我使用的是Python3,看起来凯文有道理。执行李梦龙的代码,我得到了一些奇怪的东西:python3 Pythonic_countries.py只是手动列出(生成器),我已经更改了代码。请再次检查。如果line.startswith('T'),请使用countries=[line.strip()作为f中的line,而不是,如果您想保持它的美观,实际上过滤器随着时间的推移被认为是不太像Pythonic的。如今,人们通常更倾向于使用列表理解。与其过滤(f,seq)
,不如执行[x代表x,如果f(x)]
。该语言的作者,最初。@Kevin,是的,使用过滤器更像是函数式编程。使用过滤器也有它自己的优点,它生成一个生成器,而不是一个列表。当我谈到Pythonic时,实际上我指的是使用“with”语句,非常感谢您指出这一点。我使用的是Python3,看起来凯文有道理。执行李梦龙的代码,我得到了一些奇怪的东西:python3 Pythonic_countries.py只是手动列出(生成器),我已经更改了代码。请再次检查。如果要保持美观,请使用countries=[line.strip()(如果line.startswith('T'))代替f中的line