我有两个文件,1.csv
和ss.csv
。 1.csv
是一系列交易记录,而ss.csv
是关键字列表。我想根据1.csv
中的关键字对ss.csv
的交易记录进行排序。然后我想将已排序的数据写入名为<keyword>.csv
的文件中,其中每个记录都在具有相应名称的文件中。
这是我的剧本的开始。
import csv
#all the variables and list
#new_values = []
old_values = []
second_var_ls = ''
second_var_str = ''
second_csv = ''
我在这里阅读两个文件1.csv
和ss.csv
#reading main file
first_file = open('1.csv')
first_var = csv.reader(first_file)
#reading second file containing keywords
second_file = open('ss.csv')
second_var = csv.reader(second_file)
我的主要问题在于以下功能。此函数应该匹配两个文件的内容并将它们存储在new_values
中,而old_values
包含剩下的项目,并将用于创建带有match关键字的新文件。我希望这个函数能够处理一些不同的东西。它应该:
1.csv
的项目与ss.csv
new_values
new_values
的成员写入带有关键字名称#function to match with the contents of the 1.csv
def match_content(first_var,second_var_str,second_csv):
new_values=[]
for row in first_var:
if second_var_str in row[2]:
for i in row[2]:
new_values.append(row)
print new_values
break
new_file = open(second_csv,'w')
new_var = csv.writer(new_file, dialect ='excel')
new_var.writerows(new_values)
return
此功能将ss.csv
作为列表,将其转换为字符串并调用match_content
。
#function to convert ss.csv list into strings
def lis_to_str(second_var):
for i in second_var:
second_var_ls = i
second_var_str = ''.join(map(str,second_var_ls))
#print second_var_str
second_csv = second_var_str+'.csv'
#print second_csv
match_content(first_var,second_var_str,second_csv,)
最后一个函数通过从old_values
获取值来创建剩余列表。
#function to create the remaining list
def remai_lis(old_values):
remain_fil = open('remaining.csv','wb')
remain_wb = csv.writer(remain_fil, dialect='excel')
remain_wb.writerows(old_values)
return
然后我调用第一个函数来自动化整个过程。
lis_to_str(second_var)
示例输入:
1.csv
包含
Waybill Contents Amount COD Amount Type
929780 13121248171 lkjljsad;k baggit kjlaLSKL; 5356 2992 COD
929780 13121248171 sakssk adidas kjljl;j 5356 2992 COD
929789 13118218221 lkjljsad;k baggit kjlaLSKL; 1935.15 0 Pre-paid
929789 13118218221 sakssk adidas kjljl;j 1935.15 0 Pre-paid
930025 13118221253 lkjljsad;k baggit kjlaLSKL; 5024.53 0 Pre-paid
930025 13118221253 sakssk adidas kjljl;j 5024.53 0 Pre-paid
931132 13121303740 lkjljsad;k baggit kjlaLSKL; 2997 1947 COD
931132 13121303740 sakssk adidas kjljl;j 2997 1947 COD
931138 13121302944 dhjhk reebok jhkjl;lkk 955 614 COD
931326 11157735855 dhjhk reebok jhkjl;lkk 167 197 COD
931441 11157740534 abc yepme sdgdjdjh 3746 2025 COD
931816 59626604556 abc yepme sdgdjdjh 1999 1999 COD
931199 13118445850 dhjhk reebok jhkjl;lkk
931621 59626596090 abc yepme sdgdjdjh 595 595 COD
ss.csv
包含
yepme
reebok
adidas
baggit
我得到的唯一输出是yepme.csv
,其中包含单词"yepme"
的匹配内容
931441 11157740534 abc yepme sdgdjdjh 3746 2025 COD
931816 59626604556 abc yepme sdgdjdjh 1999 1999 COD
931621 59626596090 abc yepme sdgdjdjh 595 595 COD
931421 11157961034 abc yepme sdgdjdjh 177 207 COD
答案 0 :(得分:0)
我在这里做了两个假设。第一个是你使用Python 2.7,第二个是你有实际的csv文件。如果其中任何一个不成立,那么这将不起作用。
第一步是提取不同的类别。
>>> with open("ss.csv") as f:
... categories = f.read().split()
>>> categories
["yepme", "reebok", "adidas", "baggit"]
然后我们想为每个人制作文件。
>>> files = {category: open("{}.csv".format(category), "w")
... for category in categories}
这给了我们一个像{"yepme": <file-object>, etc}
这样的词典。然后我们在。
>>> import csv
>>> with open("1.csv", "r") as csv_file:
... csv_reader = csv.reader(csv_file)
... header = csv_reader.next()
... for file_ in files.itervalues():
... file_.write(','.join(header))
... while True: # csv_reader.next() will raise a StopIteration when empty
... try:
... line = csv_reader.next()
... except StopIteration: break
... category = line[3]
... if category in files:
... files[category].write(','.join(line))
然后我们要关闭我们的文件
>>> for file_ in files.itervalues():
... file_.close()