这可能是一个愚蠢的问题,但我如何检查文件是否包含除标题之外的任何内容,而不将整个文件加载到内存中。
我的要求是这样的,我有一个文件列表。在不加载整个文件的情况下,我想检查它是否包含除标题之外的任何内容。如果是,则打开文件并执行追加操作。否则继续下一个文件。 这是我的代码:
import pandas as pd
import json
InFiles = ["Input1.txt","Input2.txt"]
OpFile = "Output.txt"
Header = False;
for i in range(0, len(InFiles)):
with open(InFiles[i]) as f:
line1, line2 = next(f), next(f)
if line2 is not None and len(line2) > 0:
df = pd.read_csv(InFiles[i], dtype=str)
if not Header:
df.to_csv(OpFile, mode='a', index=False, header=True)
Header = True
else:
df.to_csv(OpFile, mode='a', index=False, header=False)
这里,当我尝试读取标题之后的行,即line2 = next(f)
时,它会抛出异常。我想要做的是如果不存在标题之后的行,则应继续执行下一个文件。
我该怎么做?
编辑::尝试COLDSPEEEDS解决方案:
for i in range(0, len(InFiles)):
df = pd.read_csv(opFilename, dtype=str, nrows=1)
if df is not None and len(df) > 0:
df = pd.read_csv(InFiles[i], dtype=str)
if not Header:
df.to_csv(OpFile, mode='a', index=False, header=True)
Header = True
else:
df.to_csv(OpFile, mode='a', index=False, header=False)
答案 0 :(得分:0)
您可以指定nrows=1
只读取第一行,然后进行长度检查:
df = pd.read_csv(InFiles[i], dtype=str, nrows=1)
if not len(df):
...