gpt4 book ai didi

Python - csv writer 按列写入,而不是行

转载 作者:行者123 更新时间:2023-11-30 23:14:36 30 4
gpt4 key购买 nike

我正在处理一系列文本文件,我想在其中保留一些变量。我试图将这些变量保存在 csv 文件中。每个文本文件将从该 csv 文件中获取 1 行和 N 列。我可能有 1000 个或更多文件,这将导致 csv 文件具有 1000 行和 N 列(N 可以是 10 或更多或更少)。我正在尝试使用以下代码

res=[variable1, variable2, variable3, ..., variableN]
csvfile = "summary.csv"
with open(csvfile, "w") as output:
writer = csv.writer(output, lineterminator='\n')
writer.writerows(res)

问题是它在每一行中写入一个值,然后移动到下一行以获取下一个变量..而我希望每个文本文件的所有变量占用 1 行(和 N 列)。我应该如何更改我的代码才能使其正常工作?

编辑

import re
import collections
from collections import Counter
import csv
import sys


wanted1 = re.findall('\w+', open('words1.csv').read().lower())
wanted2 = re.findall('\w+', open('words2.csv').read().lower())
for f in sys.argv[1:]:
words = re.findall('\w+', open('f').read().lower())
cnt = Counter()
cnt1 = 0
cnt2 = 0
cntWords = 0
for word in words:
cntWords += 1
if word in wanted1:
cnt[word] += 1
cnt1 += 1
if word in wanted2:
cnt[word] += 1
cnt2 += 1
print cnt1, cnt2, cntWords
res=[cnt1, cnt2, cntWords]
csvfile = "summary.csv"
with open(csvfile, "w") as output:
writer = csv.writer(output, lineterminator='\n')
writer.writerow(res)

在这种情况下,每个变量都是一个数字。我还想添加一些包含字符串内容的变量。每个文本文件将占据 1 行。每个变量将占据一个单元格。

例如,cnt1 的值为 10000,cnt2 的值为 2000,cntWords 的值为 30000,等等。

我尝试更改代码以处理文件夹中的所有 .txt 文件,但现在收到错误

  File "countWords.py", line 29
writer = csv.writer(output, lineterminator='\n')
^
IndentationError: unindent does not match any outer indentation level

编辑 2:Output.csv 应该看起来像这样

       Column 1 Column 2 Column 3
Row 1: Cnt1 Cnt2 CntWords (all row 1 values should be derived from file1.txt)
Row 2: Cnt1 Cnt2 CntWords (all row 2 values should be derived from file2.txt)
Row 3: Cnt1 Cnt2 CntWords (all row 3 values should be derived from file3.txt)
Row 4: Cnt1 Cnt2 CntWords (all row 4 values should be derived from file4.txt)
Row 5: Cnt1 Cnt2 CntWords (all row 5 values should be derived from file5.txt)
Row 6: Cnt1 Cnt2 CntWords (all row 6 values should be derived from file6.txt)

通过 Cnt1,我的意思是 Cnt1 的值,通过 Cnt2,我的意思是 Cnt2 的值,通过 CntWords,我的意思是 CntWords 的值(这些将是数字)

       Column 1 Column 2 Column 3
Row 1: 5000 3000 10000 (all row 1 values should be derived from file1.txt)
Row 2: 510 420 1423 (all row 2 values should be derived from file2.txt)

这意味着输入是 2 个文本文件,第一个文本文件有单词列表 1 的 5000 个单词,单词列表 2 的 3000 个单词,总共 10000 个单词,而第二个文本文件有单词列表 1 的 510 个单词,420 个单词单词表2个单词,共1423个单词。

最佳答案

如果您只想将 3 个计数器写入 CSV 文件,那么只需在循环中写入 CSV 文件即可。在循环外部创建 CSV 编写器,并在处理文件时向其中写入行:

find_words = re.compile(r'\w+').findall

# create *sets* for faster membership tests
wanted1 = set(find_words(open('words1.csv').read().lower()))
wanted2 = set(find_words(open('words2.csv').read().lower()))

csvfile = "summary.csv"
with open(csvfile, "wb") as output:
writer = csv.writer(output)

for f in sys.argv[1:]:
cnt1 = cnt2 = cntWords = 0

with open(f) as inputfile:
for line in inputfile:
for word in find_words(line.lower()):
cntWords += 1
if word in wanted1:
cnt1 += 1
if word in wanted2:
cnt2 += 1

writer.writerow([cnt1, cnt2, cntWords])

我还用快速成员资格测试集替换了您的 wanted* 列表(而不是每次在恒定时间内找到单词时扫描整个列表),并转向扫描输入文件逐行以避免破坏内存。

关于Python - csv writer 按列写入,而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28675262/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com