非标准字符导致程序结束
non-standard characters cause program to end
我正在学习 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
>>>
您的代码有很多问题。以下修复了大部分(如果不是全部)问题 — 并且永远不会在找不到城市时终止。
# -*- 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
可能是编码问题。你必须知道文件 "world.txt".
是哪种编码
如果你不知道,试试最常用的编码。
替换行:
fh = open(source)
行:
import codecs
fh = codecs.open(source, 'r', 'utf-8')
如果还是不行,把'utf-8'
换成'cp1252'
,再换成'iso-8859-1'
。
如果none这些常用编码都行得通,就得自己找编码了。尝试在Notepad++中打开"world.txt",这个文本编辑器可以进行编码推断。 (虽然不确定 Notepad++ 是否能够打开 300 万行文件)。
了解您自己的 python 源文件使用哪种编码,并通过在源文件的开头添加类似 # -*- coding: utf-8 -*-
的行来明确地告诉它也是一个好习惯.
当然,您必须指定源文件的确切编码。再一次,用Notepad++打开就可以确定了。
我正在学习 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
>>>
您的代码有很多问题。以下修复了大部分(如果不是全部)问题 — 并且永远不会在找不到城市时终止。
# -*- 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
可能是编码问题。你必须知道文件 "world.txt".
是哪种编码如果你不知道,试试最常用的编码。
替换行:
fh = open(source)
行:
import codecs
fh = codecs.open(source, 'r', 'utf-8')
如果还是不行,把'utf-8'
换成'cp1252'
,再换成'iso-8859-1'
。
如果none这些常用编码都行得通,就得自己找编码了。尝试在Notepad++中打开"world.txt",这个文本编辑器可以进行编码推断。 (虽然不确定 Notepad++ 是否能够打开 300 万行文件)。
了解您自己的 python 源文件使用哪种编码,并通过在源文件的开头添加类似 # -*- coding: utf-8 -*-
的行来明确地告诉它也是一个好习惯.
当然,您必须指定源文件的确切编码。再一次,用Notepad++打开就可以确定了。