使用csv模块中的writerow从第一个开始写入列?

时间:2014-11-10 02:44:33

标签: python csv

我是python的新手,正在开发一个实用程序来准备一些数据用于在R中进行分析。到目前为止,该实用程序正在读取两个csvfiles,解析顶级域名和SLD的URL,然后将其写入csv从转置列表。然后我需要从" colrdr"复制其他列的csv文件的其他列。直接进入读者,如第2 - 6列。我首先尝试了一些直接的解决方案,只是从colrdr写的,就像我之前从MasterList写的那样,但是没有用(看起来colrdr列并不是什么?写完了。)在阅读了更多文档之后,我还尝试使用追加模式来创建附加复制列的编写器对象,但这也没有用。

以下是代码的相关部分:

这是我将数据解析为TLD / SLD的地方

# Create a List for future frequency distribution
SLDList = list()
TLDList = list()
MasterList = [SLDList, TLDList]
for fl in infiles:
    with open(fl, 'r') as csvin:
        reader = csv.reader (csvin, delimiter = ',')
        reader.next()
        for row in reader:
            SLDList.append(gettld(row[urlcolumn]))
            TLDList.append(psl.get_public_suffix(row[urlcolumn]))
# Create a List of other columns of infiles
    with open(fl, 'r') as csvin:
        reader = csv.reader (csvin, delimiter = ',')
        colrdr.append(zip(*(list(reader))))

我在这里创建了一些列表,我使用zip将其翻译成列,我将从代码的第二部分开始编写。

这是我写作的部分,我还没有真正弄清楚

with open(outfile, 'wb') as csvout:
    wtr = csv.writer (csvout, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for row in zip(*MasterList):
        wtr.writerow(row)
with open(outfile, 'a') as csvout:
    wtr = csv.writer (csvout, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for row in colrdr:
        wtr.writerow(row)

第一部分工作正常。第二部分没有做我认为它应该做的事情,不幸的是它甚至不会覆盖前两个文件,它好像被解释器忽略了,而我不太明白为什么。

任何帮助将不胜感激,谢谢!

编辑:我无法提供实际样本,但输入csvfiles是来自不同来源的文件,这些文件都具有格式

网址,注册商,主机,ASN

输出应该是一个文件,它结合了所有其他文件并具有格式

TLD,SLD,注册商,主机,ASN

1 个答案:

答案 0 :(得分:1)

newrows = list()
for fl in infiles:
    with open(fl, 'rb') as csvin:
        reader = csv.reader(csvin, delimiter=',')
        reader.next() # skip header
        for row in reader:
            sld = gettld(row[urlcolumn])
            tld = psl.get_public_suffix(row[urlcolumn])
            newrows.append([sld, tld] + row[1:]) # row[1:] is everything but the first

with open(outfile, 'wb') as csvout:
    wtr = csv.writer(csvout, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    wtr.writerow(["TLD", "SLD", "Registrar", "Host", "ASN"]) # write header
    wtr.writerows(newrows)