簡體   English   中英

替換CSV文件Python中的模式

[英]Replace a pattern in CSV file Python

我有多個CSV文件,可以用多種方式表示相似的內容。 例如,可以將15歲寫成以下年齡:15歲(年齡):15歲:15歲(這些是我到目前為止所看到的所有模式)。 我想用15年取代所有這些。 當我知道實際年齡或列號時,我知道該怎么做,但是對於每次出現,年齡肯定是不同的,並且列不是固定的。 csv文件可能如下所示:

CSV1:

h1,h2,h3
A1,age:15,hh
B3,age:10,fg

所需的CSV1

h1,h2,h3
A1,15 years,hh
B3,10 years,fg

只要年齡是15歲,絕對是年而不是數月或任何其他單位。

如下所示使用re.sub

re.sub(r'(,|^)(?:age\s*(?:\(years\))?:\s*(\d+)\s*(?:years)?)(?=,|$)',
       r'\1\2 years', string)

演示

例:

import re
import csv
with open('file') as f:
    reader = csv.reader(f)
    for i in reader:
        print(re.sub(r'(,|^)(?:age\s*(?:\(years\))?:\s*(\d+)\s*(?:years)?)(?=,|$)', r'\1\2 years', ','.join(i)))

輸出:

h1,h2,h3
A1,15 years,hh
B3,10 years,fg

要么

for i in reader:
    print(re.sub(r'(,|^)[^,\n]*age\s*:[^,\n]*\b(\d+)\b[^,\n]*', r'\1\2 years', ','.join(i)))

在字符串模塊中使用轉換表方法。

import csv
from string import maketrans
from string import ascii_uppercase, ascii_lowercase
delete = ascii_uppercase + ascii_lowercase + ":"
tran = maketrans("", "")

with open("infile.csv", "rb") as infile, open("output.csv", "wb") as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    for row in reader:
        #assuming the second field here
        row[1] = row[1].translate(tran, delete) + " years"
        writer.writerow(row)

我通常更喜歡使用string.translate不是regex,因為它更易於跟蹤和調試。

它是一個猜謎游戲,但是如果規則是要轉換具有單詞“ year”和某個十進制數字的任何內容,則應該這樣做。

import re

_is_age_search = re.compile(r"year|age", re.IGNORECASE).search
_find_num_search = re.compile(r"(\d+)").search

outdir = '/some/dir'
for filename in csv_filenames:
    with open(filename) as f_in, open(os.path.join(outdir, filename), 'w') as f_out:
        writer = csv.writer(f_out)
        for row in csv.reader(f_in):
            for i, val in enumerate(row):
                if _is_age_search(val):
                    search = _find_num_search(val)
                    if search:
                        row[i] = "%d years" % search.groups()
            writer.writerow(row)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM