我有多个.txt
文件,这些文件用标题行用管道分隔,但标题行会在文件中多次重复。这是一个示例:
name|address|amt_billed|service_date|ICD
data|data|data|data|data
data|data|data|data|data
data|data|data|data|data
name|address|amt_billed|service_date|ICD
我需要删除列标题的第二行而不删除标题的第一行。到目前为止,我拥有的代码将删除任何以“名称”开头的行,因此将删除初始标题行。我需要不使用熊猫来做到这一点。
这是我当前的代码:
import os
fileDirectory = 'C:Input\\directory\\'
outputDirectory = 'C:Output\\directory\\'
for root, dirs, files in os.walk(fileDirectory):
for file in files:
with open(root + file, "r") as input:
with open(outputDirectory + file, "w") as output:
for line in input:
if not line.startswith('name'):
output.write(line)
有没有办法忽略标题的第一行?
答案 0 :(得分:1)
一种非常简单的方法是使用布尔值变量检查是否已将第一行标题复制到输出文件中。然后可以删除所有其他出现的内容:
import os
fileDirectory = 'C:Input\\directory\\'
outputDirectory = 'C:Output\\directory\\'
for root, dirs, files in os.walk(fileDirectory):
for file in files:
headerCopied = False
with open(root + file, "r") as input:
with open(outputDirectory + file, "w") as output:
for line in input:
if not line.startswith('name'):
output.write(line)
else:
if not headerCopied:
output.write(line)
headerCopied = True
这应该可以解决问题。希望对您有所帮助。
答案 1 :(得分:1)
难道不可以在删除其他行之前先写标题行吗?例如,为什么不去:
for root, dirs, files in os.walk(fileDirectory):
for file in files:
with open(root + file, "r") as input:
with open(outputDirectory + file, "w") as output:
open.write("name|address|amt_billed|service_date|ICD")
for line in input:
if not line.startswith('name'):
output.write(line)
这样,它将单个标题行写入文件,然后将每个不以“ name”(AKA不是标题)开头的行添加到输出文件。假设标头字符串是静态的,是否有理由不仅以编程方式在输出中包含该行,而且根本不包含输入文件中的任何标头?
答案 2 :(得分:0)
完全按照您刚才说的做:忽略标题的第一行。
import os
fileDirectory = 'C:Input\\directory\\'
outputDirectory = 'C:Output\\directory\\'
firstHeaderRow = True
for root, dirs, files in os.walk(fileDirectory):
for file in files:
with open(root + file, "r") as input:
with open(outputDirectory + file, "w") as output:
for line in input:
if not line.startswith('name'):
output.write(line)
elif firstHeaderRow:
output.write(line)
firstHeaderRow = False