簡體   English   中英

如何在Python的csv ROW中提取和之間的內容(如果存在)

[英]How do you extract content between , and Parenthesis(if present) in a csv ROW, in Python

csv的內容如下:

"Washington-Arlington-Al, DC-VA-MD-WV  (MSAD)"  47894  1976
"Grand-Forks, ND-MN"                            24220  2006
"Abilene, TX"                                   10180  1977

通過csv讀取所需的輸出,在第1列中的“”之間找到內容,並僅獲取DC-VA-MD-WV,ND-MN和TX並將此內容放入新列中。 (用於歸一化)

到目前為止,在python中嘗試了很多正則表達式模式,但沒有找到正確的模式。

sample=""" "Washington-Arlington-Al, DC-VA-MD-WV  (MSAD)",47894,1976
           "Grand-Forks, ND-MN",24220,2006
           "Abilene, TX",10180,1977  """
 open('sample.csv','w').write(sample)
 with open('sample.csv') as sample, open('output.csv','w') as output:
    reader = csv.reader(sample)
    writer = csv.writer(output)
    for comsplit in row[0].split(','):
        writer.writerow([ comsplit, row[1]])
    print open('output.csv').read()

預期輸出為:

DC-VA-MD-WV
ND-MN
TX

在新行中

我會這樣:

with open('csv_file.csv', 'r') as f_in, open('output.csv', 'w') as f_out:
    csv_reader = csv.reader(f_in, quotechar='"', delimiter=',',
                            quoting=csv.QUOTE_ALL, skipinitialspace=True)
    csv_writer = csv.writer(f_out)
    new_csv_list = []
    for row in csv_reader:
        first_entry = row[0].strip('"')
        relevant_info= first_entry.split(',')[1].split('  ')[0]
        row += [relevant_info]
        new_csv_list += [row]
    for row in new_csv_list:
        csv_writer.writerow(row)

如果您有任何疑問,請告訴我。

提供了以下幾點,因此無需使用正則表達式:

  1. 城市(?)后面總是有一個逗號,后跟1個空格(盡管我可以添加一個修改以接受超過1位的空格)
  2. 在遇到類似(MSAD)類的字母序列之后,還有一個空格。

這段代碼針對示例輸入給出了預期的輸出:

with open('sample.csv', 'r') as infile, open('expected_output.csv', 'wb') as outfile:
    reader = csv.reader(infile)
    expected_output = []
    for row in reader:
        split_by_comma = row[0].split(',')[1]
        split_by_space = split_by_comma.split(' ')[1]
        print split_by_space   
        expected_output.append([split_by_space])

    writer = csv.writer(outfile)
    writer.writerows(expected_output)

我相信您可以使用此正則表達式模式,該模式將提取逗號和括號之間的所有字母數字表達式(帶或不帶連字符):

import re
BETWEEN_COMMA_PAR = re.compile(ur',\s+([\w-]+)\s+\(')
test_str = 'Washington-Arlington-Al, DC-VA-MD-WV  (MSAD)'
result = BETWEEN_COMMA_PAR.search(test_str)
if result != None:
    print result.group(1)

結果將顯示為: DC-VA-MD-WV ,如預期的那樣。

似乎您很難找到用於查找期望值的正確regex

我創建了一個小樣本pythext ,它將滿足您的要求。

基本上,當您檢查第一列的每個值的內容時,可以使用正則表達式,例如/(TX|ND-MN|DC-VA-MD-WV)/

我希望這是有用的! 讓我知道您是否需要進一步的解釋。

暫無
暫無

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

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