代码之家  ›  专栏  ›  技术社区  ›  Ran Eldan

在python中读取tsv文件

  •  -1
  • Ran Eldan  · 技术社区  · 6 年前

    我有很多TSV文件,我想一个接一个地读取它们,并将最后一个冒号写入其他文件。

    这是我的代码:

    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])
    

    大部分都是完美的。但问题是有些线条相互交错。 也就是说,行变量将更多的行集中在一起,这样不仅可以将最后一个冒号写入文件,而且还可以 全部 下一行的列。过了几行就停了——也说不清为什么。

    我尝试过用其他方法(如pandas)读取文件,但得到了相同的结果。 我还尝试打开输入文件并查看所有字符(记事本++)但所有行(包括problmatic行) 确实有 CR:如果。 我 知道 输入文件有问题(给出了输入文件),但我想知道是否有任何方法可以解决它。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Danny_ds    6 年前

    看起来您的文件可能有多行字段嵌入在双引号中(但如果不查看数据,很难分辨)。

    尝试添加 newline='' 在你的 open() 打电话(可能会加上 quotechar='"' reader() ,但这可能是默认值)。

    来自 doc 以下内容:

    如果 换行符=' 未指定,换行符嵌入带引号的字段中 无法正确解释


    或者可能正好相反,也许您需要关闭引用来正确解析这些文件。