【发布时间】:2012-06-02 17:38:44
【问题描述】:
当我认为 python 中的字符串不是 == 时,我遇到了一些问题,我相信这与它们的编码方式有关。基本上,我会解析一些存储在 zip 存档中的逗号分隔值(特别是 GTFS 提要,对于那些好奇的人)。
我在 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”在文本第一行中的位置,以便我可以在任何后续行中使用相应的值。这是代码的sn-p:
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(part),我得到了 '\xef\xbb\xbfagency_id' 而不是 'agency_id'。有谁知道这里发生了什么以及我该如何解决?感谢大家的帮助!
【问题讨论】:
-
对不起!你做的时候我正在编辑!
-
请注意,如果仅在第一次(或最后一次)迭代中执行代码,则在循环之前(或之后)移动该代码会更高效、更清晰。此外,您可以使用
position = lineparts.index('agency_id')在一行中查找所需字段的位置,并使用for agencyline in agency_file循环遍历文件中的其余行。一旦您的程序正常运行,您可能希望将其发布到codereview.SE 以获得更多反馈。 -
UTF-8 文件不应有 BOM:Unicode 标准“既不要求也不推荐”它们。这闻起来像 Windows 错误。