在python中解析制表符分隔文件时的奇怪行为

时间:2017-01-03 07:52:29

标签: python csv parsing

我正在解析一个制表符分隔文件,其中第一个元素是推特标签,第二个元素是推文内容。

我的输入文件如下:

#trumpisanabuser    of young black men . calling for the execution of the innocent !url "
#centralparkfiv of young black men . calling for the execution of the innocent !url "
#trumppence16   "
#trumppence16   "
#america2that   @user "

和我的代码是通过检查第二个tab-sepearted元素是否重复来过滤掉转发的重复内容。

import sys
import csv

tweetfile = sys.argv[1]
tweetset = set()
with open(tweetfile, "rt") as f:
    reader = csv.reader(f, delimiter = '\t')
    for row in reader:
       print("hashtag: " + str(row[0]) + "\t" + "tweet: " + str(row[1]))
       row[1] = row[1].replace("\\ n", "").rstrip()
       if row[1] in tweetset: 
          continue  
       temp = row[1].replace("!url","")
       temp = temp.replace("@user","")
       temp = "".join([c if c.isalnum() else "" for c in temp])
       if temp: 
           taglines.append(row[0] + "\t" + row[1])
       tweetset.add(row[1])

但是,解析很奇怪。当我打印每个解析的项目时,输出如下。任何人都可以解释为什么解析中断并导致打印此行(hashtag: #trumppence16 tweet:,换行符,然后#trumppence16)?

hashtag: #centralparkfive   tweet: of young black men . calling for the execution of the innocent !url "
hashtag: #trumppence16  tweet: 
#trumppence16   
hashtag: #america2that  tweet: @user "

1 个答案:

答案 0 :(得分:1)

推文上有"行。 CSV可以引用列,引用"围绕值,包括换行符。从开头"到下一个结束"的所有内容都是单个列值。

您可以将quoting option设置为csv.QUOTE_NONE

来停用报价处理功能
reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)