Hello StackOverflow社区。 p>
我是Python的新用户,所以提前抱歉这个问题的愚蠢!但是我已经尝试了几个小时来修复它,但仍然没有弄清楚它。
我正在尝试导入一个大型文本数据集,以便在Python中对其进行操作。
此数据集位于.csv中,由于编码问题,我在读取数据时遇到了问题。
我尝试使用notepad ++以UTF-8文本对其进行编码 我在Python中尝试了csv.reader模块
以下是我的代码示例:
import csv
with open('twitter_test_python.csv') as csvfile:
#for file5 in csvfile:
# file5.readline()
#csvfile = csvfile.encode('utf-8')
spamreader = csv.reader(csvfile, delimiter=str(','), quotechar=str('|')
for row in spamreader:
row = " ".join(row)
row2= str.split(row)
listsw = []
for mots in row2:
if mots not in sw:
del mots
print row2
但是当我用Python导入数据时,我仍然有编码问题(重音等),无论我使用的是哪种方法。
如何对数据进行编码,以便Python可以正确读取?
谢谢!
答案 0 :(得分:0)
csv module documentation 提供了如何处理unicode的示例:
import csv,codecs,cStringIO
class UTF8Recoder:
def __init__(self, f, encoding):
self.reader = codecs.getreader(encoding)(f)
def __iter__(self):
return self
def next(self):
return self.reader.next().encode("utf-8")
class UnicodeReader:
def __init__(self, f, dialect=csv.excel, encoding="utf-8-sig", **kwds):
f = UTF8Recoder(f, encoding)
self.reader = csv.reader(f, dialect=dialect, **kwds)
def next(self):
'''next() -> unicode
This function reads and returns the next line as a Unicode string.
'''
row = self.reader.next()
return [unicode(s, "utf-8") for s in row]
def __iter__(self):
return self
class UnicodeWriter:
def __init__(self, f, dialect=csv.excel, encoding="utf-8-sig", **kwds):
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def writerow(self, row):
'''writerow(unicode) -> None
This function takes a Unicode string and encodes it to the output.
'''
self.writer.writerow([s.encode("utf-8") for s in row])
data = self.queue.getvalue()
data = data.decode("utf-8")
data = self.encoder.encode(data)
self.stream.write(data)
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)
with open('twitter_test_python.csv','rb') as spamreader:
reader = UnicodeReader(fin)
for line in reader:
#do stuff
print line
答案 1 :(得分:0)
Alexey Smirnov's answer很优雅,但初学者可能有点复杂。因此,让我举一个更接近问题代码的例子。
使用Python 2读取文件时,内容为str
,而不是unicode
。可能你想尽快转换它。但是,documentation of the csv module表示"此版本的csv模块不支持Unicode输入。"所以你应该编码csv.reader
的输出,而不是输入。将其插入代码会导致:
import csv
with open('twitter_test_python.csv') as csvfile:
spamreader = csv.reader(csvfile, delimiter=str(','), quotechar=str('|'))
for row in spamreader:
row = " ".join(row)
row = unicode(row, encoding="utf-8")
row2 = row.split()
但是,你可能想要考虑是否只是为了再次拆分它们而加入细胞就是你想要的。如果没有它,代码将如下所示。如果列表元素包含空格,则结果不同。
import csv
with open('twitter_test_python.csv') as csvfile:
spamreader = csv.reader(csvfile, delimiter=str(','), quotechar=str('|'))
for row in spamreader:
row2 = list(unicode(cell, encoding="utf-8") for cell in row)
如果您要将某些内容写回文件,则应首先将unicode
转换回str
unicode.encode("utf-8")
。