从txt文件中删除重复的标题行,但保留第一行标题

时间:2018-11-06 14:14:14

标签: python

我有多个.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)

有没有办法忽略标题的第一行?

3 个答案:

答案 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