Skip to main content
 首页 » 编程设计

python之如何从 CSV 生成的这些字符串中删除所有 ''

2025年05月04日25me-sa

我制作了这个将 CSV 转换为字典的公式:

def CSVtoDict(BDF, mode): 
    saved={} 
    with open('%s%s.csv' % (dataDir,BDF), mode='r') as infile: 
        reader = csv.reader(infile) 
        for row in reader: 
            if mode is 'prune' and row == '': 
                break 
            else: 
                pass 
            key = row[0] 
            saved[key]=row[1:] 
    return saved 

我试图做到这一点,以便当模式为“修剪”时,返回 CSV 中的任何字符串,例如 ['data1'、'data2'、''、''、''],但不带任何 ' '.但是由于某种原因,break 语句似乎不起作用,并且返回的东西就好像没有 if else 一样。

您还知道执行此操作的 pythonic 方式是什么吗?我觉得这可能会更有效率......

CSV 中的示例行:

意识,ASD,ASD2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,

请您参考如下方法:

如果我正确理解您的问题,您是在尝试在 mode == 'prune' 时过滤掉空行,对吗?或者您是否试图在遇到空行时立即停止(如果您的条件正确,这就是 break 将实现的结果)?

问题是 csv 行返回为列表,而不是字符串,即 csv 文件中的一行看起来像这样:

a,b,1,2 

在遍历 reader 时将作为 ['a','b','1','2'] 返回。空行显示为 [],而不是 ''。如果要检查空行,可以检查 len(row) == 0。此外,您的 else: pass 并没有真正做任何事情,因此您可以将其省略。结果应该是这样的:

for row in reader: 
    if mode is 'prune' and len(row) == 0: 
        break # or continue, if you want to proceed with the rest of the file 
    key = row[0] 
    saved[key]=row[1:] 

如果正如另一个答案所暗示的那样,您正在尝试删除任何具有空字段的行,然后将 len(row) == 0 更改为 '' in row.