CVS writerow()after表达式

2024-04-19 22:52:13 发布

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

我没能做到回复subcsv文件。 我的表情是做它的工作,但作家是我卡住的地方。你知道吗

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]])

Tags: csvimportreforreada1readerrow
2条回答

也许你需要这样的东西?你知道吗

#!/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])

一个文件就是一个迭代器,你在上面迭代一次,它就空了。你知道吗

csv.reader也是迭代器。你知道吗

通常,如果要重用迭代器,有三种方法:

  1. 重新生成迭代器(如果迭代器的源是迭代器,那么也重新生成迭代器,以此类推)-在本例中,这意味着再次生成open文件。你知道吗
  2. 使用itertools.tee。你知道吗
  3. 将迭代器复制到一个序列中,然后重用而不是。你知道吗

在文件的特殊情况下,可以使用f.seek(0)伪造#1。其他一些迭代器也有类似的行为。但总的来说,你不应该依赖这个。你知道吗

总之,最后一个是最简单的,让我们看看它是如何工作的:

reader = list(csv.reader(f))
read = reader

现在您已经有了文件中所有行的列表。你可以复制它,循环它,循环复制,关闭文件,再次循环复制,它仍然在那里。你知道吗

当然,不利的一面是你需要足够的内存来把整件事放到内存中(另外,在读完最后一行之前,你不能开始处理第一行)。如果这是一个问题,您需要重新组织代码以便只需要一次传递,或者重新打开(或者seek)文件。你知道吗

相关问题 更多 >