我正在将两列CSV文件输出到文本文件,并将所有内容打印在文本文件中的一行上。像这样:
Product Name Counter({'Descriptions': 1, 'Descriptions':3})
但是我希望它能像这样打印出来:
Product Name Counter({'Descriptions': 1,
'Descriptions': 3})
这是我到目前为止的代码:
import csv
import sys
from collections import defaultdict
from collections import Counter
data = defaultdict(list)
class dictionary:
with open ('practice.csv', 'rb') as f:
reader = csv.reader(f)
next(reader, None)
for row in reader:
data[row[2]].append(row[3])
text_file = open("test.txt", "w")
data_count = Counter()
for key in data.keys():
sys.stdout = text_file
print key, Counter(data[key])
text_file.close()
如何让我的文本文件不能在一行打印出来? 不知道如何让它发挥作用。
答案 0 :(得分:1)
Counter({'Descriptions': 1, 'Descriptions':3})
内容是Counter __str__()
函数的输出。当您使用print Counter(stuff)
时,会隐含地调用由Counter(stuff)
生成的新对象。如果我理解正确,您想重新格式化此输出。
您可以将Counter(data[key])
的输出存储在变量中,然后通过在输出中的,
的所有位置添加换行来修改该输出:
a = str(Counter(data[key]))
print '\n'.join(a.split(','))
哪个会很难看; - )
然而,你可以自己设计你的ouptut:计数器的键可以通过a.keys()
访问,所以你可以添加一个循环:
a = Counter(data[key])
print key, 'Counter({',
for counter_key in a.keys():
print counter_key + ': ' + a[counter_key] + ','
print '})'
迭代计数器的内容,并逐行输出计数器中的键值组合。
编辑: 您的代码的第二部分将如下所示:
text_file = open("test.txt", "w")
for key in data.keys():
text_file.writelines(key + ' Counter({')
counted = Counter(data[key])
for counter_key in counted.keys():
text_file.writelines(' ' + counter_key + ': ' + counted[counter_key] + '\n')
text_file.writelines('})\n')
text_file.close()
注意:可以使用
迭代计数器中的键/值对for counter_key, counter_value in counted.items():
答案 1 :(得分:0)
您需要在\ n
的每行末尾添加一个新行您是否尝试使用data.writer添加行?
import csv
with open('practice.csv', 'wb') as f:
data = csv.writer(f, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
data.writerow(['Spam'] * 5 + ['Baked Beans'])
data.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])