简体   繁体   中英

Best way to count the number of deleted lines from a file using python

I'm wondering what is the easiest way to count the number of deleted lines from a file using python. Is it taking the index of lines before and after and subtracting? Or is there a way to count the number lines deleted in a loop?

In my sample file below, I have a before user-input file and an after file that is written to exclude any lines from the user input that has negative numbers or blank spaces. I realize I will either need to count the before and after files, or find a way to count the items in the note_consider[] list.

import os, sys

inFile = sys.argv[1]
baseN = os.path.basename(inFile)
outFile = 'c:/example.txt'

#if path exists, read and write file
if os.path.exists(inFile):
    inf = open(inFile,'r')
    outf = open(outFile,'w')

    #reading and writing header
    header = inf.readline()
    outf.write(header)

    not_consider = []

    lines = inf.read().splitlines()
    for i in range(0,len(lines)):
        data = lines[i].split("\t")

        for j in range(0,len(data)):
            if (data[j] == '' or float(data[j]) < 0):
                #if line is having blank or negtive value
                # append i value to the not_consider list
                not_consider.append(i)
    for i in range(0,len(lines)):
        #if i is in not_consider list, don't write to out file
        if i not in not_consider:
            outf.write(lines[i])
            print(lines[i])
            outf.write("\n")   
    inf.close()
    outf.close()

This code reads a file in input and write the lines that are not empty or numbers in an output file. Was that what you expected ?

If you don't use the information about the not_considered lines, then you can remove the associated code, and replace the for line_idx, line in enumerate(ifile.readlines()): with for line in ifile.readlines(): .

The with open(<filename>, <mode>) as file: statement takes care of opening the file and closing it for you when living the scope of the statement.

def is_number(line: str):
    try:
        float(line)
        return True
    except ValueError:
        return False


with open("./file.txt", "r") as ifile, open("output.txt", "w") as ofile:
    not_considered = []

    for line_idx, line in enumerate(ifile.readlines()):
        if line == "\n" or is_number(line):
            not_considered.append(line_idx)
            continue

        ofile.write(line)

print(f"not considered  : {not_considered}")
print(f"n not considered: {len(not_considered)}")

input file:

this is

1234

a

file

with a lot

42
of empty lines

output file:

this is
a
file
with a lot
of empty lines

console output:

not considered  : [1, 2, 3, 5, 7, 9, 10]
n not considered: 7

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM