创建CSV文件以放置用逗号python

时间:2018-07-26 08:25:19

标签: python regex csv variables

keywords_cap = ['SpA', 'SPA', 'LIMITADA', 'LTDA', 'S.A.']
keywords_cap = map(re.escape, keywords_cap)
keywords_cap.sort(key=len, reverse=True)
obj = re.compile(r'[:,;.]\s*"?([^:,;.]*?(?<!\w)(?:{}))'.format('|'.join(keywords_cap)))
m = obj.search(mensaje)
if m:
    company_name = ("COMPANY NAME: {}".format(m.group(1)))

regex = r"\s*CVE\s+([^|]*)"
matches = re.search(regex, mensaje)
if matches:
    company_cve = ("CVE: %s" % matches.group(1).strip())

dic = [company_name, company_cve, "example", "another"]  #dictionary

create_csv = "exampleCsv.csv" 
csv = open(create_csv, "w") 

columnTitleRow = "name, cve\n"
csv.write(columnTitleRow)

for key in dic.keys():
 company_name = key
 company_cve = dic[key]
 row = company_name + "," + company_cve + "\n"
 csv.write(row)

for中有很多正则表达式。这是一个在文本文件中找到变量CVE的示例。我希望能够将用逗号分隔的csv写入文本中找到的所有变量的结果。

输入:变量company_name和company_cve(以及更多从正则表达式中提取的变量...)

输出:CVE,其标头为变量的名称,在另一行下方,包含变量company_name,company_cve和其他变量的结果。

1 个答案:

答案 0 :(得分:1)

问题陈述尚不完全清楚,但我认为您正在收集有关一个(或多个)公司的数据,然后您希望将这些数据打印到CSV文件中。

首先,您现有的代码有几个问题:

dic = [company_name, company_cve, "example", "another"]  #dictionary

这是一个列表,而不是字典。字典具有键值结构,将这样声明:

dic = { 'name': company_name, 'cve': company_cve, 'example': 'example data' }

第二,打开文件时最好使用with以防止潜在的文件打开错误:

with open('exampleCsv.csv', 'w') as csvfile:
    # write to the file

第三,如果您使用现有的csv库,则不必担心公司名称或其他文件数据中包含逗号的情况; csv将为您处理。有关完整的详细信息,请参见csv library documentation。您需要在脚本的开头导入cvs库:

import csv
import re

并创建一个csv.writer对象以输出数据:

with open('exampleCsv.csv', 'w') as csvfile:
    writer = csv.writer(csvfile, delimiter=',', quotechar='"') # set your CSV options here

根据用于保存公司数据的数据结构,可以用不同的方式将其打印出来。

# list of headers
headers = [ 'company_name', 'company_cve', 'prop_1', 'prop_2' ]

# list of variables holding company data
dic = [ company_name, company_cve, example_1, example_2 ]

with open('exampleCsv.csv', 'w') as csvfile:
    writer = csv.writer(csvfile, delimiter=',', quotechar='"')
    writer.writerow( headers )  # print the header row
    writer.writerow( dic )

或者如果您创建了包含公司数据的字典:

company = {
    'company_name': 'Company A',
    'company_cve': 'Some value',
    'prop_1': 'value 1',
    'prop_2': 'value 2'
}
# note that dictionary keys match the headers
headers = [ 'company_name', 'company_cve', 'prop_1', 'prop_2' ]

with open('exampleCsv.csv', 'w') as csvfile:
    writer = csv.writer(csvfile, delimiter=',', quotechar='"')
    writer.writerow( headers )
    writer.writerow( map( lambda x: company[x], headers ) )

或许多公司的词典列表:

company_data = [{
    'company_name': 'Company A',
    'company_cve': 'Some value',
    'prop_1': 'value 1',
    'prop_2': 'value 2'
},{
    'company_name': 'Company B',
    'company_cve': 'A different value',
    'prop_1': 'value 3',
    'prop_2': 'value 4'

}]

headers = [ 'company_name', 'company_cve', 'prop_1', 'prop_2' ]

with open('exampleCsv.csv', 'w') as csvfile:
    writer = csv.writer(csvfile, delimiter=',', quotechar='"')
    writer.writerow( headers )
    for c in company_data:
        writer.writerow( map( lambda x: c[x], headers ) )