我一直在研究Python脚本来解析csv文件中的单个分隔列。但是,该列有多个不同的分隔符,我无法弄清楚如何执行此操作。
我有另一个脚本可以处理类似的数据,但是无法使用这个脚本。以下数据位于该行的单个列中。我想让脚本解析这些并在每个脚本之间添加标签。然后我想将这些数据附加到只包含唯一项的列表中。通常我处理数百行这些数据,并希望解析整个文件,然后只返回两列中的唯一项(一个用于IP,另一个用于URL)。
要解析的数据: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
有谁知道如何完成我想要做的事情?
答案 0 :(得分: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
如果您需要进一步的帮助,请发表评论
答案 1 :(得分:0)
您也可以使用替换来更改您的导入行:(我认为不是过于pythonic而是标准内置):
>>> 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()