使用Python解析分隔的CSV文件,输出到终端或文件

0 投票
2 回答
1328 浏览
提问于 2025-04-17 22:02

我正在写一个Python脚本,用来处理一个CSV文件中的单列数据。可是,这一列的数据用的分隔符不止一种,我搞不清楚该怎么处理。

我有另一个脚本可以处理类似的数据,但这个脚本就是不管用。下面的数据在同一行的单列中。我想让这个脚本把这些数据分开,并在每个数据之间加上制表符。然后,我想把这些数据放进一个列表里,只保留独特的项目。通常我会处理几百行这样的数据,想要解析整个文件,然后只返回两个列的独特项目(一个是IP地址,另一个是网址)。

需要解析的数据是:123.123.123.123::url.com,url2.com,234.234.234.234::url3.com(注意:":"和","在同一行中用作分隔符)

我正在使用的脚本是:

import sys
import csv

csv_file = csv.DictReader(open(sys.argv[1], 'rb'), delimiter=':')

uniq_rows = []

for column in csv_file:
    X = column[' IP'].split(':')[-1]
    row = X + '\t' 

    if row not in uniq_rows:
        uniq_rows.append(row)

for row in uniq_rows:
    print row

有没有人知道我该怎么做才能实现我的目标?

2 个回答

0

你也可以直接用替换功能来修改你的导入行:(这可能不是特别符合Python的风格,但这是标准的内置功能):

>>> a = "123.123.123.123::url.com,url2.com,234.234.234.234::url3.com"
>>> a = a.replace(',','\t')
>>> a = a.replace(':','\t')
>>> print (a)
123.123.123.123     url.com url2.com    234.234.234.234     url3.com
>>> 

正如这里评论中提到的,简单的文本处理可以帮助你(希望)在清理重复项之前得到正确的输出:

import sys

read_raw_file = open('D:filename.csv') # open current file
read_raw_text  = read_raw_file.read()
new_text = read_raw_text.strip()

new_text = new_text.replace(',','\t')
# new_text = new_text.replace('::','\t') optional if you want double : to only include one column
new_text = new_text.replace(':','\t')

text_list = new_text.split('\n')
unique_items = []
for row in text_list:
    if row not in unique_items:
        unique_items.append(row)


new_file ='D:newfile.csv'
with open(new_file,'w') as write_output_file: #generate new file
    for i in range(0,len(unique_items)):
        write_output_file.write(unique_items[i]+'\n')
    write_output_file.close()
0

把这个列表(uniq_rows = [])改成一个集合(uniq_rows = set()):

csv_file = csv.DictReader(open(sys.argv[1], 'rU'), delimiter=':')
uniq_rows = set()
for column in csv_file:
    X = column[' IP'].split(':')[-1]
    row = X + '\t' 
    uniq_rows.add(row)

for row in list(uniq_rows):
    print row

如果你需要更多帮助,可以留言

撰写回答