我正在尝试使用:
作为分隔符来读取文件,并且包含空白行。我的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']
答案 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')