Helen Firs
Helen Firs

Reputation: 353

Removing specific text from every line

I have a txt file with this format:

something text1 pm,bla1,bla1
something text2 pm,bla2,bla2
something text3 am,bla3,bla3
something text4 pm,bla4,bla4

and in a new file I want to hold:

bla1,bla1
bla2,bla2
bla3,bla3
bla4,bla4

I have this which holds the first 10 characters for example of every line. Can I transform this or any other idea?

with open('example1.txt', 'r') as input_handle:
    with open('example2.txt', 'w') as output_handle:
        for line in input_handle:
            output_handle.write(line[:10] + '\n')

Upvotes: 0

Views: 109

Answers (5)

Steven Rumbalski
Steven Rumbalski

Reputation: 45562

Here is how I would write it.

Python 2.7

import csv
with open('example1.txt', 'rb') as f_in, open('example2.txt', 'wb') as f_out:
    writer = csv.writer(f_out)
    for row in csv.reader(f_in):
        writer.write(row[-2:]) # keeps the last two columns

Python 3.x (note the differences in arguments to open)

import csv
with open('example1.txt', 'r', newline='') as f_in:
    with open('example2.txt', 'w', newline='') as f_out:
        writer = csv.writer(f_out)
        for row in csv.reader(f_in):
           writer.write(row[-2:]) # keeps the last two columns

Upvotes: 1

woozyking
woozyking

Reputation: 5220

If the format is fixed:

with open('example1.txt', 'r') as input_handle:
    with open('example2.txt', 'w') as output_handle:
        for line in input_handle:
            if line:  # and maybe some other format check
                od = line.split(',', 1)
                output_handle.write(od[1] + "\n")

Upvotes: 1

jfs
jfs

Reputation: 414795

To remove the first ","-separated column from the file:

first, sep, rest = line.partition(",")
if rest: # don't write lines with less than 2 columns
   output_handle.write(rest)

Upvotes: 1

ryrich
ryrich

Reputation: 2204

Try:

output_handle.write(line.split(",", 1)[1])

From the docs:

str.split([sep[, maxsplit]])

Return a list of the words in the string, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done (thus, the list will have at most maxsplit+1 elements).

Upvotes: 0

Fredrick Brennan
Fredrick Brennan

Reputation: 7357

This is what the csv module was made for.

import csv
reader = csv.reader(open('file.csv'))

for row in reader: print(row[1])

You can then just redirect the output of the file to the new file using your shell, or you can do something like this instead of the last line:

for row in reader:
    with open('out.csv','w+') as f:
        f.write(row[1]+'\n')

Upvotes: 3

Related Questions