在写入特定列以输出文件然后在Excel中打开时出现Python CSV格式问题

问题

我有一个包含大量项目的CSV文件。

第一列可以包含IP地址或随机垃圾。 我唯一关心的另一列是第四列。

我已经写了下面的代码片段,试图检查第一列是否是IP地址,如果是,将第四列的内容和第四列的内容并排写入另一个CSV文件。

with open('results.csv','r') as csvresults: filecontent = csv.reader(csvresults) output = open('formatted_results.csv','w') processedcontent = csv.writer(output) for row in filecontent: first = str(row[0]) fourth = str(row[3]) if re.match('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', first) != None: processedcontent.writerow(["{},{}".format(first,fourth)]) else: continue output.close() 

这在一定程度上起作用。 但是,在Excel中查看时,两个项目都放在一个单元格中,而不是两个相邻的元素。 如果我在记事本中打开它,我可以看到每行都用引号括起来。 如果这些被删除,Excel将正确显示列。

示例input

 1.2.3.4,rubbish1,rubbish2,reallyimportantdata 

期望的输出

 1.2.3.4 reallyimportantdata - two separate columns 

实际产出

 "1.2.3.4,reallyimportantdata" - single column 

问题

有没有什么办法可以让format部分不要用引号写出来呢? 或者,什么是实现我想要做的最好的方法?

我已经试过写出到另一个文件,并剥离线,但尽pipe没有抛出任何错误,结果是一样的…

writerow()获取元素列表,并将每个元素写入列。 由于您只提供一个元素的列表,因此它将被放置在一列中。

相反,提供writerow()列表:

 processedcontent.writerow([first,fourth]) 

你有没有考虑过使用pandas?

 import pandas as pd df = pd.read_csv("myFile.csv", header=0, low_memory=False, index_col=None) fid = open("outputp.csv","w") for index, row in df.iterrows(): aa=re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$",row['IP']) if aa: tline = '{0},{1}'.format(row['IP'], row['fourth column']) fid.write(tline) output.close() 

可能有一两个错误,我从这里得到了正则expression式。 这假定csv的第一行具有可被引用的标题。 如果没有,那么你可以使用header = None并用iloc引用列

来想一想,你可能可以在dataFrame上运行正则expression式,将第一和第四列复制到一个新的dataFrame中,并在pandas中使用to_csv方法。