繁体   English   中英

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

[英]Python CSV formatting issue when writing specific columns to output file then opening in Excel

问题

我有一个包含大量项目的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将正确显示列。

示例输入

1.2.3.4,rubbish1,rubbish2,reallyimportantdata

期望的输出

1.2.3.4    reallyimportantdata - two separate columns

实际产出

"1.2.3.4,reallyimportantdata" - single column

问题

有没有办法捏造format部分不写出引用? 或者,什么是实现我想要做的最好的方法?

我已经尝试写出另一个文件并剥离行,但是,尽管没有抛出任何错误,结果是相同的......

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

相反,为writerow()一个列表:

processedcontent.writerow([first,fourth])

你考虑过使用熊猫吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM