Editing particular lines of a text file.

S

Shriphani

Hello all,

I am trying to create a script that looks at specific strings in a
file like:

msgid "I am a disco dancer."

and compares the part in quotes to the keys in a dictionary, finds the
value and creates a new line right after this string in the file. I
have planned to write this as follows:

1. Open the file in read mode
2. parse each line to figure out which line contains "msgid" and use
the shlex module's split method to go and split this line and pick the
2nd element list[1].
3. find the value from the dictionary corresponding to the above
element.
4. Insert the line. This part is where I face a problem. How do I
plainly edit just one line. I would also like to look at some sample
code that does this.
5. open a new file and write the new file with the inserted strings to
it.
6. close both files opened.

Regards,
Shriphani Palakodety
 
T

Tim Williams

Hello all,

I am trying to create a script that looks at specific strings in a
file like:

msgid "I am a disco dancer."

and compares the part in quotes to the keys in a dictionary, finds the
value and creates a new line right after this string in the file. I
have planned to write this as follows:

1. Open the file in read mode
2. parse each line to figure out which line contains "msgid" and use
the shlex module's split method to go and split this line and pick the
2nd element list[1].
3. find the value from the dictionary corresponding to the above
element.
4. Insert the line. This part is where I face a problem. How do I
plainly edit just one line. I would also like to look at some sample
code that does this.
5. open a new file and write the new file with the inserted strings to
it.
6. close both files opened.


infile = open('infile.txt')
outfile = open('outfile.txt','w')
for line in infile:
if 'msgid' in line:
# transform line
# make sure the line ending is intact
outfile.write(line)
infile.close()
outfile.close()

or maybe

infile = open('infile.txt')
outfile = open('outfile.txt','w')
new_file = []
for line in infile:
if 'msgid' in line:
# transform line
# make sure the line ending is intact
new_file.append(line)
outfile.write(''.join(new_file)
infile.close()
outfile.close()
 
L

Larry Bates

Shriphani said:
Hello all,

I am trying to create a script that looks at specific strings in a
file like:

msgid "I am a disco dancer."

and compares the part in quotes to the keys in a dictionary, finds the
value and creates a new line right after this string in the file. I
have planned to write this as follows:

1. Open the file in read mode
2. parse each line to figure out which line contains "msgid" and use
the shlex module's split method to go and split this line and pick the
2nd element list[1].
3. find the value from the dictionary corresponding to the above
element.
4. Insert the line. This part is where I face a problem. How do I
plainly edit just one line. I would also like to look at some sample
code that does this.
5. open a new file and write the new file with the inserted strings to
it.
6. close both files opened.

Regards,
Shriphani Palakodety

Sounds like homework, but I'm feeling generous (not tested).

xlate={'"I am a disco dancer."':'"but John Travolta is better"'}


fp1=open('inputfile.txt', 'r')
fp2=open('outputfile.txt', 'w')

for line in fp1:
#
# Your description is unclear here about whether the new line
# replaces the existing one or is inserted after it.
#
fp2.writeline(line)
if line.startswith('msgid'):
parts=line.split(' ')
try: parts[1]=xlate[parts[1]]
except:
#
# Handle exception if your translation dictionary does
# not have the string you are looking for here.
#
raise KeyError

newline=' '.join(parts)
fp2.writeline(newline)

fp1.close()
fp2.close()


-Larry
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top