Python CSV:到达空值后循环停止

2024-05-18 08:43:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想读取由我的其他脚本生成的CSV文件,我需要同时检查2列。问题是我的循环停止了,因为有些行的值是空的,不能达到下面的值。例如:

  1. 散列1111
  2. 哈希2222
  3. 哈希3333
  4. 散列4444
  5. 哈希5555
  6. 散列
  7. 散列
  8. 哈希6666

我不能读更多的第5点,因为6和7有空值,我还需要读8。这是我的密码。你知道吗

import csv

with open('vts.csv') as csvDataFile:
    csvReader = csv.reader(csvDataFile, delimiter=';')
    next(csvReader)  

    VTs = []

    for row in csvReader:
        VT = row       
        VTs.append(VT)

    for row in VTs:
        print(row[0],row[4])

有没有办法不用手动排序Excel就可以继续列表?你知道吗


Tags: 文件csvinimport脚本密码forwith
3条回答

首先,csv文件不是Excel文件。前者是文本分隔文件,后者是二进制文件。你知道吗

接下来,您的问题不在读取时:csv模块可以很容易地接受行中字段数目可变的文件,包括空行,它只会为row提供空列表。你知道吗

所以解决方法就是:

...
for row in VTs:
    if len(row) > 4:
        print(row[0],row[4])

除了给定数据的print(row[0],row[4])之外,您的代码没有问题,因为没有那么多列。我测试了你的代码如下:

.py公司

import csv

with open('vts.csv') as csvDataFile:
    csvReader = csv.reader(csvDataFile, delimiter=';')
    next(csvReader)

    VTs = []

    for row in csvReader:
        VT = row
        VTs.append(VT)

    for row in VTs:
        print(row[0], row[1])

你知道吗vts.csv文件你知道吗

HASH;1111
HASH;2222
HASH;3333
HASH;4444
HASH;5555
HASH;
HASH;
HASH;6666

如果您的数据作为示例,那么实际上不需要delimiter=';',因为它是逗号分隔的值(因此是csv),而不是分号;。你知道吗

不管怎样,如果指定的列不存在,您可以忽略它。假设您的输入是正确的csv格式,如下所示。你知道吗

col1,col2
hash1,1111
hash2,2222
...

你可以使用csv.reader作为你所做的。你知道吗

import csv

with open('vts.csv') as csvDataFile:
    csvReader = csv.reader(csvDataFile, delimiter=';')
    next(csvReader)  

    # csv.reader returns generator object, which you can convert it to list as below
    VTs = list(csvReader) 

    for row in VTs:
        if len(row) == 2:
            print(row[0],row[1])

如果您的目标只是检查数据,那么可以方便地使用^{}

import pandas as pd

df = pd.read_csv("vts.csv")
print(df.dropna()) # This will print all rows without any missing data

相关问题 更多 >