【发布时间】:2015-04-24 20:44:04
【问题描述】:
我正在处理一系列文本文件,我想从中保留一些变量。我试图将这些变量保存在 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个词。
【问题讨论】:
-
我不清楚
variable1等中包含哪些类型的数据。我的回答在这里解决了两种可能性,但如果您更新您的问题以向我们提供示例输入数据,将会很有帮助和预期的输出,以及你现在得到的错误输出。这不一定是真实数据,只是一个示例,向我们展示正在发生的事情以及您想要什么。 -
好的,请稍候,我会尽快更新我的答案。
-
刚刚编辑了我最初的帖子。谢谢
-
看,你在这里做的是完全不同的事情。您将
Counter对象写入 CSV 的事实完全改变了您需要做的事情。每个计数器的预期输出是什么? -
抱歉没有正确解释。对于文件循环内的每个文本文件,计数器应设置为零。我有两个单词列表,我计算每个文本文件中属于该单词列表的单词数。然后我还计算每个文本文件中的总字数。我想把这些写在一个摘要 csv 文件中(每个文件应该占据一行 N 列,N 是我要保留的变量数)