我有很多tsv文件,我想逐一阅读它们,并将最后一个coloum写入其他文件。
这是我的代码:
for filename in os.listdir(path):
with open(path+'/'+filename,'r',encoding="utf8") as tsvin, open('temptweets.csv','a',encoding='utf-8') as csvout:
tsvin = csv.reader(tsvin, delimiter='\t')
csvout = csv.writer(csvout)
count = 0
for row in tsvin:
try:
count = str(row[-1])
except ValueError:
pass # w.e.
if len(count) >= 0:
csvout.writerow([count])
大部分工作都很完美。但问题在于,有些线路是互相干扰的。 即行变量让更多的行与之相关,因此最终不仅将最后一个coloum写入文件,而且 ALL 下一行的coloums。它在几行后停止 - 无法说明原因。
我尝试用其他一些方法(例如pandas)读取文件但得到了相同的结果。 我还尝试打开输入文件并查看所有字符(记事本++),但所有行(包括问题行) DO HAVE CR:LF。 我知道输入文件有问题(给出了输入文件),但我想知道是否有办法解决它。
答案 0 :(得分:1)
看起来你的文件可能有多行字段嵌入双引号中(但是如果不查看数据就很难分辨)。
尝试在newline=''
电话中添加open()
(并可能将quotechar='"'
添加到reader()
,但这可能是默认设置。
来自doc:
如果未指定
newline=''
,则在引用字段中嵌入换行符 将无法正确解释
或者它可能相反,也许你需要关闭引用来正确解析这些文件..