我们如何管理调用for循环python程序的函数?

时间:2015-02-11 05:28:55

标签: python list function csv for-loop

我有两个文件,1.csvss.csv1.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.csvss.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

1 个答案:

答案 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}这样的词典。然后我们在。

中读取你的主要csv文件
>>> 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()