编辑:在我试图缩小我的问题的范围内,我可能会过度简化以使其更难回答。让我再尝试一次。假设字典是:
holder = {'key1':['headline1', 'body1'], 'key2':['headline2', 'body2']}
我希望将该字典输出到csv文件,该文件将在三列中表示该信息:键列,标题列和正文列。由于下面提到的原因,尝试使用下面提到的答案做错了。
希望这一点更清楚。
我正在抓取一些中国新闻网站并尝试将结果输出到csv文件中。在抓取之后,字典的结构是:
uniqueID : [headlines, body]
每个故事。我试图输出最终读取的CSV:
uniqueID1 / headlines1 / body1
uniqueID2 / headlines2 / body2
uniqueID3 / headlines3 / body3
每个列在不同的列中(所以基本上是三列,行数和故事一样多)。
我尝试使用this question的解决方案,但除了翻转X和Y轴(我知道如何修复)之外,它还将每个标题/故事中的每个字符分成不同的条目,打破了字符编码。由于我不知道如何解决这些问题,我有点卡住了。
如果它有用或相关,我会用这种方式编码字符:
head_fixed = str(headline)
soup = BeautifulSoup(head_fixed, 'lxml')
good_output = soup.text.decode("unicode-escape").encode("utf-8")
当然,我也对我构建数据的方式错误的建议持开放态度。
感谢您的任何想法。
答案 0 :(得分:0)
使用pandas
(您可能需要pip install pandas
)
import pandas as pd
holder = {'key1':['headline1', 'body1'], 'key2':['headline2', 'body2']}
df = pd.DataFrame(holder)
df.transpose().to_csv('output.csv', header=None)
# output.csv:
# key1 headline1 body1
# key2 headline2 body2
答案 1 :(得分:0)
我最终通过将数据重组为列表来解决此问题,因此:
holder = [[key1, headline1, body1], [key2, headline2, body2]]
然后我刚用
with open('output.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(holder)
我不确定在这种情况下使用词典,列表或两者的组合是否有优势。在这种情况下,切换到列表似乎有效,尽管我对Daniel建议的解决方案有点好奇。