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

标签 python csv

我是 python 新手,正在开发一个实用程序来准备一些数据以在 R 中进行分析。到目前为止,该实用程序正在读取两个 csv 文件,解析 TLD 和 SLD 的 url,然后将它们从转置列表。然后,我需要将 csv 文件的其他列从“colrdr”直接复制到阅读器中,作为第 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)

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

如有任何帮助,我们将不胜感激,谢谢!

编辑:我无法提供实际示例,但输入 csv 文件是来自不同来源的文件,并且都具有以下格式

URL、注册商、主机、ASN

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

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

最佳答案

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)

关于python - 使用 csv 模块中的 writerow 从第一列开始写入列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26835957/

相关文章:

python - 在 Windows 7 上安装 GitPython

python - 修剪/去除 numpy 数组的零点

python - pandas:将数据帧减少到仅出现特定的事件链

python - 如何删除有条件的对象

python - 在 python 中使用 csv writer 时如何设置精度

python - 如何在Python中更有效地对csv文件中的列求和

python - 我想在 PyQt 的某个列中将两个 lineEdit 信息添加到 csv

python - 异常后的 SQLAlchemy session

php - 内爆和 explode 关联数组

python - 变量在函数调用之间不清除