查询CSV并将原始CSV和结果写入单个CSV Python

2024-06-02 17:18:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解析一个CSV,如果在任何一列中都满足条件,请将其写入一个新的CSV。在

例如

如果我有一个csv

123 Some Street
Flat 1, 21 Other road
House, Someother street

我需要分析每一行,所以如果一个数字出现在第一列,而不是第二列,那么我需要提取这个数字,如果两列都有一个数字,那么我需要同时提取两个数字,如果没有数字,那么我需要提取第一列中的文本。 然后写一个新的csv,其中有2个原始列和3个新列1,2,text。即公寓号,门牌号,门牌号。 所以新的CSV看起来像

^{pr2}$

任何指导都会很有帮助。在

谢谢

已编辑

import csv

csvFile = 'myData.csv'
csvOut = 'myOut.csv'

reader = csv.reader(csvFile)
writer = csv.writer(csvOut)

for row in reader:
    num = \d | \d\d | \d\d\d
     if row [0] || row [1] == num
        if row [1] == num
            writer.row [3]
        else row [0] == num
            writer.row [2]
            writer.row [3]
    else writer.row [0] [2]

csvOut.close()

再次编辑

我希望这可能是一个更清楚的解释:

我希望输出是一个新的CSV,原始数据在第[0],[1]行,然后如果行中只有一个数字,即写入第[3]行的门牌号,如果一行(第[0]行和第[1]行)中有2个数字,则它们应分别写入第[2]行和第[3]行;如果没有数字,则第[0]行的字符串将写入第[4]行。最后,我需要将公寓号、门牌号和门牌名分成3个不同的列。在

进一步编辑

我一直在努力的代码,现在有以下,我觉得我越来越近,但仍然有一段路要走?在

import csv
import re

csvFile = open(myData.csv, 'rb')
csvOut = open(myOut.csv, 'wb')

reader = csv.reader(csvFile)
writer = csv.writer(csvOut)

for row in reader:
    a = row [0] re.compile('\d' | '\d\d' | '\d\d\d')
    a1 = row [0] re.compile('\d' | '\d\d' | '\d\d\d')
    b = row [1] 
    b1 = row [1] re.compile('\d' | '\d\d' | '\d\d\d')
        if b = re.compile('\d' | '\d\d' | '\d\d\d')
            writer.writerow(a,b,a1,b1, )
        elif a = re.compile('\d' | '\d\d' | '\d\d\d')
            witer.writerow(a,b, , b1, )
        else
            writer.writerow(a,b, , ,a)

csvOut.close()

谢谢


Tags: csvcsvfileimportre编辑if数字num
2条回答

这可能会给你一个线索,因为我不完全确定你需要什么。在

$cat t1

123 Some Street
Flat 1, 21 Other road
House, 23 Someother street

示例

^{pr2}$

输出

ROW ['123 Some Street']
    #1 123
ROW ['Flat 1', ' 21 Other road']
    #1 1
    #2 21
ROW ['House', ' 23 Someother street']
    #2 23

下面的代码可以满足您的需要。对于输出,只需索引元组并写出所需的组件。每个结果有6个元素

#(flat str, flat #, street str, street #, street, street type)

a = """
123 Some Street
Flat 1, 21 Other road
House, Someother street
"""

import re
#flat gets a word, 0 or more spaces, 0 or more digits
flat    = "([a-z]+ *(\d+)*)"
#street gets 0 or more digits, 1 or more spaces, 1 or more words with a space consuming until it hits street, or road or drive
street  = "((\d+)* +([a-z]+ )+?(street|road|drive))"
address = "%s*.*?%s" % (flat,street)
m       = re.compile(r"%s" % address, re.I)
results = m.findall(a)
with('output.csv','w') as fout:
    #whatever you wish to name your columns
    fout.write("Building,Address,Suite Number, Building Number")
    for r in results:
        fout.write("%s,%s,%s,%s" % (r[0],r[2],r[1],r[3]))

结果

^{pr2}$

相关问题 更多 >