如何从CSV文件中删除空白行?

时间:2018-09-06 10:16:55

标签: python python-3.x

我正在尝试使用:作为分隔符来读取文件,并且包含空白行。我的CSV文件看起来像-

P Data Usage (Bytes):        640
P Inst Usage (Bytes):        13322
P Local Patch Match:         105
P Global Patch Match:        20

V Data Usage (Bytes):        312
V Inst Usage (Bytes):        972
V Local Patch Match:         24
V Global Patch Match:        1

U UOP Usage:                 352
U Patch Match:               51

我想从该文件中删除空白行,并将其存储在同一文件中。我想使用:之后的所有值来更新Excel表。

如何从文件中删除空白行,因为如果我尝试读取文件,则它仅读取前4行,而不读取任何其他行。我想在列表中的每一行中存储每个整数值,例如-

a = ['640', '13322', '105', '20', '312', '972', '24', ..., '51']

3 个答案:

答案 0 :(得分:3)

您没有CSV文件,因此请勿尝试将其视为一个。 CSV特别是指由列的行组成的文件,其中所有行的列数均相同,并且列由单个字符(通常是逗号或制表符)分隔。

如果您所需的只是代码的前4个值,则无需从源文件中删除行。

只需循环遍历文件中的各行,用空白分隔每一行,如果结果列表不为空,则取最后一个值:

numbers = []
with open(filename) as inf:
    for line in inf:
        data = line.split()
        if data:
            numbers.append(data[-1])
没有参数的

str.split()任意长度的空格上分割,包括制表符,空格和换行符,开头和结尾的任何空格均被忽略。

当一行为 empty 时,line字符串将为'\n',并且拆分这样的一行会导致一个空列表。如果一行上除了空格以外还有其他内容,您将获得每个非空格部分的字符串列表:

>>> '\n'.split()
[]
>>> 'P Inst Usage (Bytes):        13322\n'.split()
['P', 'Inst', 'Usage', '(Bytes):', '13322']

因为文件的每一行末都有所需的数字,所以使用最后一个元素(带有[-1])可以获取所有数字。

如果只需要前四行,请测试len(numbers)结果:

numbers = []
with open(filename) as inf:
    for line in inf:
        data = line.split()
        if data:
            numbers.append(data[-1])
            if len(numbers) == 4:
                break

break停止for循环,当您退出with语句时,文件将自动关闭。

如果您确实需要跳过空白行,只需测试line.strip()是否正确即可; str.strip()使用相同的任意宽度空格规则从开头和结尾删除空格。仅带有换行符的空行以空字符串结尾,当在布尔测试(例如if ...:条件)中使用时,这些空字符串被视为 false

if line.strip():
    # line is not empty

如果愿意,您可以将其写入新文件,但这并不是真正需要的。此处

答案 1 :(得分:0)

只需将这些行剥离即可检查它们是否为空。

with open('in.csv', 'r') as fpin, open('out.csv', 'w') as fpout:
    for line in fpin:
        if line.strip():
            fpout.write(line)

答案 2 :(得分:0)

import pandas as pd
df = pd.read_csv('file.csv',sep=':')
df = df.dropna(how='all')