Python 为什么我会收到AttributeError消息?

Python 为什么我会收到AttributeError消息?,python,attributeerror,Python,Attributeerror,我有一个名为tweets.txt的文件。每行的格式如下: [纬度,经度]值日期时间文本 文件中包含的数据示例如下: [41.29866962999999,-81.915329330000006]6 2011-08-28 19:02:36工作需要飞逝。。。我很高兴看到《间谍小子4》和我一生的挚爱。。。欠费 今天将是我一生中最伟大的一天。受雇在我最好朋友的父母50周年纪念日拍照。60位老人。呜呜。 [38.8099549399997,-77.12514405000003]6 2011-08-28 1

我有一个名为tweets.txt的文件。每行的格式如下:

[纬度,经度]值日期时间文本

文件中包含的数据示例如下:

[41.29866962999999,-81.915329330000006]6 2011-08-28 19:02:36工作需要飞逝。。。我很高兴看到《间谍小子4》和我一生的挚爱。。。欠费
今天将是我一生中最伟大的一天。受雇在我最好朋友的父母50周年纪念日拍照。60位老人。呜呜。
[38.8099549399997,-77.12514405000003]6 2011-08-28 19:07:05我只是把我的生命放在5个行李箱里

我的作业要求我提取每行的第一个和第二个索引(纬度和经度,它们是整数)。问题是这些字符有“[”、“、”和“]”等字符,我想删除这些字符

tweetfile=input("Enter name of tweet file: ")  
infile=open(tweetfile,"r",encoding="utf-8")  
for line in infile:  
    line=line.rstrip()  
    word=line.split()  
    word=word.rstrip(",") 
如您所见,每当我在上面的字带行中输入参数时,无论是[、逗号还是[,我都会收到一条错误消息,上面说:

AttributeError:“list”对象没有属性“rstrip”


为什么我会收到此消息?我认为我做的是正确的。正确的方法是什么?

split
将字符串拆分为一个列表。当需要对每个单词调用时,您正在尝试对实际列表执行
rstrip

您可以循环浏览列表以实现以下目的:

for line in infile:  
    line=line.rstrip()  
    for word in line.split():
        word=word.rstrip(",")
或者,你可以像以前一样拆分它&通过索引访问你想要的单词

请澄清:

在代码中,
split()
word
转换为:

[“[38.8099549399997,”

“-77.12514405000003]”

“6”

“2011-08-2819:07:05”

“我”

“只是”

“放”

“我的”

“生命”

“在”

“像”

“5”

“手提箱”]

您正在尝试对其执行一个
rstrip
,而不是单词本身。循环列表访问每个单词并允许您使用
rstrip

split()
函数返回一个无法对其执行
string
函数的列表。 问题在于按顺序使用这两行

word=line.split()  #this will actually return a list of words not just a word
word=word.rstrip(",")
在您的情况下,如果您确定这种格式,您可以这样做:

tweetfile=input("Enter name of tweet file: ")  
infile=open(tweetfile,"r",encoding="utf-8")  
for line in infile:  
    line=line.rstrip()  
    coordinates_string=line.split(']')
    coordinates_cleaned = coordinates_string[1:] #removes the [
    lat_lon_string = coordinates_cleaned.split(',') #split lat lon
    lat = lat_lon_string[0].strip()
    lon = lat_lon_string[1].strip()
    # convert to float if you would like then after

您的代码有一些地方出错

首先,一般来说,更喜欢使用
来打开文件以
打开
。您不关闭文件对象,因此在关闭Python之前,操作系统认为它仍然处于打开状态(正在使用中)

其次,
split
,当在字符串上运行时,会将其拆分为一个
列表
。您希望从所有此类子字符串中去掉逗号,因此需要遍历生成的
列表
——在
列表
上运行
strip
,因为它不是字符串,所以没有意义

最后,以这种方式遍历从文件中读取的文本并重新指定给
word
变量不会更改该文本,而只会更改
word
变量所指向的内容,因此实际上不会看到任何效果

例如:

>>> numbers = [1, 2, 3, 4, 5]
>>> for i in numbers:
...     i += 1
...
>>> numbers
[1, 2, 3, 4, 5]
原因是
i
连续指向从1到5的整数。当您对其执行
+=
时,您所做的是更改
i
指向的对象,而不是获取
i
指向的对象并对其进行更改

打个比方:沿着路标到一所房子,然后修剪那里的草坪,然后移动路标指向另一所房子,这两者之间是有区别的

试试这个:

tweet_path = input("Enter name of tweet file: ")
with open(tweet_path, "r", encoding='utf-8') as f:
    coordinates = [line.split()[:2] for line in f]

cleaned_coordinates = [(lat[1:-1], lon) for lat, lon in coordinates]

最后,请注意:纬度和经度是
float
,而不是
int
,如果需要,您可以相应地转换它们。

因为
split()
将行拆分为一个单词列表,因此
单词
是一个列表。您需要对列表中的每个单词调用
rstrip
,而不是对列表本身。这除了重新分配给循环变量外,什么都做不了。@MarcusLim他们仍然需要对
单词
执行所需的操作,但它应该可以解决问题他们当前出现的错误?@AmandepPasricha您需要在每个单词上执行它。我编辑了答案,以显示为什么需要它的示例。@ItsPete哦,好吧,我明白了。但是,您能解释一下为什么即使我修复错误并以这种方式执行,这对单词本身也没有影响吗?有人用另一个c解释了这一点OMENT.@AmandepPasricha在循环的迭代过程中,它对单词有影响,但我没有输入任何代码来使用这个单词。我只是修复了您无法调用
rstrip
的问题。Marcus Lim说我的代码没有对它执行任何其他操作。@AmandepPasricha我编辑了我对c的回答larify this,您在拆分后使用了rstrip,rstrip需要一个字符串,而split返回一个列表您能解释一下这行吗:coordinates\u cleaned=coordinates\u string[1:]我不太明白这里做了什么。坐标中的字符串部分包含[一开始,你想删除它,这样你就可以在不引起corversion错误的情况下使用这些数字谢了,我现在已经好多了。你说的时候我还是有点困惑“最后,以这种方式遍历从文件读取的文本并重新指定给word变量不会更改该文本,而只会更改word变量所指向的内容,因此您实际上不会看到任何效果“。我不明白为什么我看不到任何效果?嘿,谢谢,我做得更好了。你是说你只是在编辑单词变量(基本上是I),对吗?好的。所以它不会改变行本身的实际代码?它只会在循环中改变它,对吗?