[英]CVS writerow() after expression
我一直無法重新生成一個csv文件。 我的表情正在完成它的工作,但是寫行是我受阻的地方。
re.sub out
"A1","Address2" "A1","Address2"
0138,"DEERFIELD AVE" 0138,"DEERFIELD"
0490,"REMMINGTON COURT" 0490,"REMMINGTON"
2039,"SANDHILL DR" 2039,"SANDHILL"
import csv
import re
with open('aa_street.txt', 'rb') as f:
reader = csv.reader(f)
read=csv.reader(f)
for row in read:
row_one = re.sub('\s+(DR|COURT|AVE|)\s*$', ' ', row[1])
row_zero = row[0]
print row_one
for row in reader:
print writerow([row[0],row[1]])
文件是一個迭代器-您對其進行一次迭代,然后將其為空。
csv.reader
也是一個迭代器。
通常,如果要重用迭代器,可以通過三種方法進行:
open
文件。 itertools.tee
。 在文件的特殊情況下,可以使用f.seek(0)
偽造#1。 其他一些迭代器具有類似的行為。 但總的來說,您不應該依賴於此。
無論如何,最后一個是最簡單的,所以讓我們看看它是如何工作的:
reader = list(csv.reader(f))
read = reader
現在,您已獲得文件中所有行的列表。 您可以復制,循環瀏覽,循環復制副本,關閉文件,再次循環復制副本,它仍然存在。
當然,不利的一面是,您需要足夠的內存才能將整個內容存儲在內存中(此外,您必須先閱讀完最后一行,才能開始處理第一行)。 如果存在問題,則需要重新組織代碼以使其只需要通過一次,或者重新打開(或seek
)文件。
也許您需要這樣的東西?
#!/usr/local/cpython-3.3/bin/python
# "A1","Address2" "A1","Address2"
# 0138,"DEERFIELD AVE" 0138,"DEERFIELD"
# 0490,"REMMINGTON COURT" 0490,"REMMINGTON"
# 2039,"SANDHILL DR" 2039,"SANDHILL"
import re
import csv
with open('aa_street.txt', 'r') as infile, open('actual-output', 'w') as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile)
for row in reader:
row_zero = row[0]
row_one = re.sub('\s+(DR|COURT|AVE|)\s*$', '', row[1])
writer.writerow([row_zero, row_one])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.