写入csv:当行中的项目为空时,列被移位 (Python)

基本读取,一切正常。

with open('kres.csv', newline='') as f:
    reader = csv.reader(f, quoting=csv.QUOTE_ALL)
    for row in reader:
        print(row)
        kres.append(row)

在这里,我正在向csv文件写入,但当行中的字段(项目)为空时,列会被移动,这(我猜)是因为程序不知道文件中有多少列,所以一个一个地写。但我希望它不要跳过空字段,我希望它写一些默认字符或无。我不知道如何检查字段是否为空。

with open('kres2.csv', 'w', newline='') as f:    # Just use 'w' mode in 3.x
    writer = csv.writer(f)
    writer.writerows(kres)

在Windows 7上使用Python 3.3.2

EDIT:试图chak列表中的每一个字段,但没有工作。

with open('article_all_krestianin_ru.csv', newline='') as f:
    reader = csv.reader(f, quoting=csv.QUOTE_ALL)
    for row in reader:
        for i in row:
            if i == '':
                i = '-'
            print(row)
        krestianin.append(row)

编辑2:[‘А теперь – про язык;Окт 21’, ‘ 2008;Окт 21’, ‘ 2008А теперь – про язык спрашивала’, ‘ как ;http:/www.krestianin.ruarticles5541.php‘]

这是从控制台,所有4个项目的位置(分隔符;)。任何一个项目都可能缺失,一个甚至两个,所以如果4个项目中缺失2个,我想在它们的位置上加”-“。

解决方案:

我想你不明白CSV模块在Python中是如何工作的。比方说……我认为你不明白在Python中CSV模块是如何工作的。kres.csv 文件里有这些数据。

1,2,3,4,5,6,7
a,b,c,d,e,f,g

然后当你执行这段代码时

import csv

kres = []

with open('kres.csv') as f:
    reader = csv.reader(f, quoting=csv.QUOTE_ALL)
    for row in reader:
        print(row)
        kres.append(row)

输出将是:

['1', '2', '3', '4', '5', '6', '7']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

所以你得到的是列表,每一个列表都是你读取的一行。

如果你的kres.csv文件中有这些数据,

1,2,3,5,6,7
a,b,c,d,e,f,g

而你需要的输出是这样的:

['1', '2', '3', '-', '5', '6', '7']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

然后你需要写一个检查,首先检查行中有多少个元素(在这种情况下,如果小于7,那么你就会误报一些元素。之后,你需要找到缺少的元素。为此,你需要知道 4 (如本例),应该是在 3 而之前 5.

你可以使用Regex来写这个检查(当然这取决于你在CSV文件中的数据),你必须检查每个元素(元素是否在正确的列中,列表中的位置)。

你可以通过编程来完成,但不能使用CSV模块。


CSV文件中的空元素是这样显示的。

1,2,3,,5,6,7
a,b,c,d,e,f,g

所以代码的输出将是:

['1', '2', '3', '', '5', '6', '7']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

,,'', 是空元素

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何进行分组并创建字符串列表?

2022-9-9 9:21:17

未分类

如何使用包含空格的变量?

2022-9-9 9:21:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索