我在Python中的字符串遇到了一些问题,而我认为它们应该是==
,我相信它与编码的方式有关。基本上,我解析了存储在zip压缩文件中的一些以逗号分隔的值(专门针对那些好奇的GTFS源)。Python字符串编码和==
我在python中使用ZipFile模块打开某些文件的zip压缩文件,然后将文本与一些已知值进行比较。下面是一个例子文件:
agency_id,agency_name,agency_url,agency_phone,agency_timezone,agency_lang
ARLC,Arlington Transit,http://www.arlingtontransit.com,703-228-7433,America/New_York,en
我使用的是试图找出在文本中的第一行字符串“agency_id”的位置,这样我可以在任何后续行使用相应的值的代码。以下是一段代码:
zipped_feed = ZipFile(feed_name, "r")
agency_file = zipped_feed.open("agency.txt", "r")
line_num = 0
agencyline = agency_file.readline()
while agencyline:
if line_num == 0:
# this is the header, all we care about is the agency_id
lineparts = agencyline.split(",")
position = -1
counter = 0
for part in lineparts:
part = part.strip()
if part == "agency_id":
position = counter
counter += 1
line_num += 1
agencyline = agency_file.readline()
else:
.....
此代码适用于某些zip存档,但不适用于其他人。我做了一些研究,并尝试印刷repr(部分),我得到'\ xef \ xbb \ xbfagency_id'而不是'agency_id'。有谁知道这里发生了什么,以及我如何修复它?感谢所有的帮助!
对不起打开它!当你做到这一点时,我正在编辑过程中! – jmetz
请注意,如果代码仅在第一次(或最后一次)迭代中执行,则在循环之前(或之后)移动该代码的性能和清晰度会更高。此外,您可以使用'position = lineparts.index('agency_id')'在一行中查找所需字段的位置,并使用'for agency_file'中的代理线来循环访问文件中的其余行。一旦您的程序正确运行,您可能需要将其发布到[codereview.SE](http://codereview.stackexchange.com/)以获取更多反馈。 – outis
UTF-8文件不应该有BOM:它们是Unicode标准“既不要求也不推荐”的。这闻起来像一个Windows错误。 – tchrist