Python 2.7如何读取文件指定文本赋值变量(获取字符串而非索引)
问题根因
str.find() 方法的返回值本身就是匹配子串所在位置的整数索引,未找到匹配时返回-1,你当前的代码仅调用了find()获取位置索引,完全没有执行字符串切片截取操作,自然拿不到目标文本内容。除此之外代码本身还有3处逻辑错误:
- 纬度结束位置
latend的查找逻辑错误:你尝试查找第二个Latitude=子串作为结束标记,但示例文件中Latitude=仅出现1次,因此返回-1,正确的结束标记应该是纬度所在行的换行符。 - 经度起始位置查找时使用了未定义的变量
start,逻辑不成立,运行时本应抛出NameError,若实际运行未报错说明上下文中存在误定义的同名变量,取值完全不符合预期。 - 经度结束位置
longend错误查找逗号位置,但示例文件的经纬度行不存在逗号,返回的8795是文件其他位置的逗号索引,和目标经度内容无关。
修正代码
核心逻辑:先定位目标键(如Latitude=)的起始索引,加上键本身的长度得到值的起始位置,再查找值之后第一个换行符作为结束位置,最后通过字符串切片拿到目标值。Python 2.7环境可直接运行的代码如下:
# 前置条件:已将文件全部内容读取为字符串存入content变量 # 读取纬度 lat_key = "Latitude=" lat_key_start = content.find(lat_key) lat_val_start = lat_key_start + len(lat_key) lat_val_end = content.find("\n", lat_val_start) # 兼容最后一行无换行符的情况 lat_val_end = lat_val_end if lat_val_end != -1 else len(content) latitude = content[lat_val_start:lat_val_end].strip() # 读取经度 long_key = "Longitude=" long_key_start = content.find(long_key) long_val_start = long_key_start + len(long_key) long_val_end = content.find("\n", long_val_start) long_val_end = long_val_end if long_val_end != -1 else len(content) longitude = content[long_val_start:long_val_end].strip()
运行后latitude变量值为N21° 20' 47.36",longitude变量值为W157° 27' 23.20",均为预期的字符串类型。
内容的提问来源于stack exchange,提问作者Calvin
相关产品推荐
相关产品推荐

