非标准字符导致程序结束

时间:2016-04-23 15:56:53

标签: python python-2.7 text-mining

我正在学习python用于数据挖掘,我有一个文本文件,其中包含世界城市及其坐标的列表。使用我的代码,我试图找到城市列表的坐标。一切都很好,直到有一个非标准字符的城市名称。我希望程序将跳过该名称并移至下一个名称,但它会终止。如何让程序跳过它找不到的名字并继续下一个?

lst = ['Paris', 'London', 'Helsinki', 'Amsterdam', 'Sant Julià de Lòria',
       'New York', 'Dublin']
source = 'world.txt'
fh = open(source)
n = 0
for line in fh:
    line.rstrip()

    if lst[n] not in line:
        continue
    else:
        co = line.split(',')
        print lst[n], 'Lat: ', co[5], 'Long: ', co[6]

        if n < (len(lst)-1):
            n = n + 1
        else:
            break

此次运行的结果是:

>>>
Paris Lat:  33.180704 Long:  67.470836

London Lat:  -11.758217 Long:  17.084013

Helsinki Lat:  60.175556 Long:  24.934167

Amsterdam Lat:  6.25 Long:  -57.5166667

>>>

2 个答案:

答案 0 :(得分:0)

您的代码存在许多问题。以下修复了大部分(如果不是全部的话) - 并且在找不到城市时应该永远不会终止。

# -*- coding: iso-8859-1 -*-
from __future__ import print_function

cities = ['Paris', 'London', 'Helsinki', 'Amsterdam', 'Sant Julià de Lòria', 'New York',
          'Dublin']
SOURCE = 'world.txt'

for city in cities:
    with open(SOURCE) as fh:
        for line in fh:
            if city in line:
                fields = line.split(',')
                print(fields[0], 'Lat: ', fields[5], 'Long: ', fields[6])
                break

答案 1 :(得分:0)

这可能是编码问题。您必须知道文件“world.txt”的编码。

如果您不知道,请尝试最常用的编码。

替换行:

fh = open(source)

使用以下行:

import codecs
fh = codecs.open(source, 'r', 'utf-8')

如果仍然无效,请将'utf-8'改为'cp1252',然后改为'iso-8859-1'。 如果这些常见编码都不起作用,则必须自己查找编码。尝试在Notepad ++中打开“world.txt”,这个文本编辑器能够进行编码推理。 (不确定Notepad ++是否能够打开300万行文件。)

最好知道哪种编码是您自己的python源文件,并通过在源文件的开头添加类似# -*- coding: utf-8 -*-的行来明确告诉它。

当然,您必须指定源文件的确切编码。再次,您可以通过在Notepad ++中打开它来确定它。