【问题标题】:Writing x number of values to each row in txt file将 x 个值写入 txt 文件中的每一行
【发布时间】:2017-06-24 01:16:06
【问题描述】:

我目前正在尝试将列表写入 csv 文件,以便每行有 x 个值(值的数量是 x 的倍数)。一段时间以来,我一直在寻找解决方案,并且找到了许多方法来解决这个问题,但我似乎无法让代码做我想做的事情。

这是我假设的例子... 我试图压缩列表,以便它是一个列表列表,试图让它每行写入 2 个值。但是没有用;这就是发生的事情......

我希望 .txt 文件中的列表如下所示:

Chocolates,3
Novels,14
Pens,4
Smiles,78

但在我的编码中,它看起来像这样......

record1 = ['Chocolates', '3', 'Novels', '14', 'Pens', '4', 'Smiles', '78']

我用这个来压缩它:

records = [record1[i:i+2] for i in range(0, len(record1), 2)]

prize = open("box.txt","w")
writer = csv.writer(prize)
writer.writerow(records)

但是在txt文件中是这样的

"['Chocolates', '3']","['4', '14']","['Pens', '4']","['Smiles', '78']"

我也尝试过以不同的方式将列表写入文件...

prize = open("box.txt","w")
writer = csv.writer(prize)
for record in records:
    writer.writerow(records)
prize.close()

但它看起来像这样:

"['Chocolates', '3']","['hiii', '14']","['Pens', '4']","['Smiles', '78']"
"['Chocolates', '3']","['hiii', '14']","['Pens', '4']","['Smiles', '78']"
"['Chocolates', '3']","['hiii', '14']","['Pens', '4']","['Smiles', '78']"
"['Chocolates', '3']","['hiii', '14']","['Pens', '4']","['Smiles', '78']"

我不知道我是否走在正确的轨道上,或者我的方法是否正确。我认为外观取决于列表的外观,但是,我开始相信这取决于我将其写入文件的方式。

感谢您的阅读。希望我的解释清楚,如果不是很抱歉。

【问题讨论】:

  • >>> record1 = ['Chocolates', '3', 'Novels', '14', 'Pens', '4', 'Smiles', '78'] >>> [record1[i:i+2] for i in range(0, len(record1), 2)] [['Chocolates', '3'], ['Novels', '14'], ['Pens', '4'], ['Smiles', '78']]
  • 除非您只是想学习csv 模型,否则您的案例直接写出来会更容易。对于一般重组(即分区),请参阅stackoverflow.com/questions/3992735/…

标签: python csv rows


【解决方案1】:

在第一种情况下,您应该使用writerows(),而不是writerow()

writer.writerows(records)

在第二种情况下应该是:

for record in records:
    writer.writerow(record)    # record, not records

演示

尝试将其粘贴到 Python shell 中:

import csv

record1 = ['Chocolates', '3', 'Novels', '14', 'Pens', '4', 'Smiles', '78']
records = [record1[i:i+2] for i in range(0, len(record1), 2)]

with open("box.txt", "w") as prize:
    writer = csv.writer(prize)
    writer.writerows(records)

运行此代码后box.txt 包含:

巧克力,3 小说,14 笔,4 微笑,78

【讨论】:

  • 你确定是后者吗?我文件中的每个字符都写成在它们之间有一个逗号,例如c,h,o,c,o,l,a,t,e,s,3 等...
  • @Tamz.001:如果您尝试for record in record1:,就会发生这种情况。不要将record1 与按N 分组的records 混淆。
  • 是的,我按照你说的做了,但还是发生了。不过感谢您的帮助。
  • @Tamz.001:那么你一定是在做一些不同的事情——它对我有用。我在答案中添加了一个完整的例子;尝试将其逐字粘贴到 Python shell 中。
【解决方案2】:

你调用了错误的方法。必须是:

prize = open("box.csv","w")
writer = csv.writer(prize)
writer.writerows(records)

【讨论】:

  • 哦,谢谢-我没有意识到这一点。唯一的问题是,现在文本文件中的值如下所示:Chocolates,3 hiii,14 Pens,4 Smiles,78 **four times
  • 我认为我们正在讨论不同的解决方案。我的回答是指你的first sn-p。你是怎么打开文件的?在 Excel 中?
  • 不,我使用的是文本文件(记事本)。抱歉,如果我的解释不够清楚,但我展示的两次尝试是为了同一个目的:在我的文本文件的每一行中打印 x(在这个假设的场景中 - 2)值
  • 将文件另存为 .csv - 然后您可以在 Excel 中打开它。并再次检查我的答案,我将我的评论放在上下文中。
  • 是的!有用。非常感谢 - 我真的很感激。
【解决方案3】:

希望你喜欢这个。

import csv


record1 = ['Chocolates', '3', 'Novels', '14', 'Pens', '4', 'Smiles', '78']
with open('box.csv', 'wb') as csvfile:
    writer = csv.writer(csvfile)
    for item, count in zip(record1[::2], record1[1::2]):
        writer.writerow([item, count])

参考:https://docs.python.org/2/library/csv.html#csv.writer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多