【发布时间】:2013-06-05 19:27:28
【问题描述】:
(此问题与this one有关)
我正在读取解析 csv 内容,该内容之前已加载到内存中:
def ReadTxtIntoColumns(txt, columns):
rows = []
print txt
print txt.find('\x00')
print txt.count('\x00')
f = StringIO(txt)
try:
reader = csv.reader(f, delimiter=' ', skipinitialspace=True)
for row in reader:
# Merge all extra columns
if len(row) >= columns:
rest = ' '.join(row[columns-1:])
del row[columns-1:]
row.append(rest)
# And now set missing columns to None
for i in range (len (row), columns):
row.append(None)
rows.append(row)
except csv.Error, e:
log.error('ReadTxtIntoColumns > Problems reading csv from string > line %d: %s', reader.line_num, e)
finally:
f.close()
return rows
输入数据是我手写的(一个简单的文本文件,空格分隔)。我的输入数据中根本没有 '\x00',但 csv 抱怨它:
ReadTxtIntoColumns > Problems reading csv from string > line 1: line contains NULL byte
那么错误信息是什么意思呢?
编辑
这是我的简化输入数据,我已经验证它仍然会导致同样的问题:
#COMMAND USER DIRECTORY SAFE COMMAND
uname - - FALSE uname -a
sleep - - FALSE sleep 100
【问题讨论】:
-
您不需要将输入包装在
StringIO对象中;只需传入任何可迭代的;例如,text.splitlines(True)就可以了。 -
你能给我们一个最小的样本
text值来重现问题吗? -
numpy.loadtxt不适合您的情况吗? -
@Martijn Pieters:添加了输入数据。有趣的是,我在一个系统中遇到了这个问题,但在另一个系统中没有。 csv 库在两者中都是相同的。一个是python 2.7.3(ok),另一个是2.7.2(error)
-
@gonvaled:是否涉及任何 Unicode?span>
标签: python