处理Python中的正则表达式匹配CSV记录
我试过了(4小时阅读文档,谷歌搜索,...),它必须是我的大脑,所以我会感谢任何温柔的微调或正确的方向踢:处理Python中的正则表达式匹配CSV记录
得到一个.csv
文件,我需要处理: 仅保持一定的正则表达式匹配的行(RE是^[A-Z][A-Z];.*15%;
),然后打印出特定列(例如1,2,13,15和17)。在shell(grep,awk)中很容易,在Python中不可能(对我来说)。
这是我想出了迄今为止代码:
import re
import csv
src="/Users/username/file.csv"
reg="^[A-Z][A-Z];.*15%;"
with open(src, "r") as file:
for line in file:
line=line.strip()
match = re.match(reg,line.strip())
if match:
vat=csv.reader(line, delimiter=';')
for r in vat:
print r[0]
出乎我的信念,CSV模块解析每个字符的记录,而不是整个行,因此输出不是现场[0]的一个数组,但是有一个字符。
如果我添加打印行,如果匹配
if match:
print line
行打印正确后,因此我的困惑 - 为什么不csv.reader这样对待他们?
期待着听到您的想法 - 知道蟒蛇,该解决方案是非常简单;-)
PS:如果RE匹配可以在单独的列进行加分,我。即只处理行,如果1列的匹配[AZ] [AZ]忽略大小写和柱17个匹配15% - 然后打印第1列,2,13,15和17
with open(src, newline='') as file:
r = csv.reader(file, delimiter=';')
for line in r:
if len(line[0]) ==2 and line[0].isalpha() and line[16]=='15%':
print(line) #Or whatever it is you want to do
没有正则表达式确实必要的,但r'[a-zA-Z]{2}'
也可以工作
应该是:'line [16] =='15%''(语法错误)。无法直接编辑这篇文章,因为“编辑必须至少有6个字符”;) –
@dr_agon好赶上 –
谢谢帕特里克!这样做的诀窍:-)比我更优雅(这并不是那么困难);-) –
'csv.reader'迭代你给它的对象,然后将它分割成一个字符串列表。你用一行代替一个文件提供csv.reader。当你遍历一行(这是一个字符串)时,你得到的字符为_records_,当你遍历一个文件时,你会得到行。 –