Changing the middle of strings in a list--I know there is a better way.

Duncan Booth duncan.booth at invalid.invalid
Tue Oct 21 13:45:25 EDT 2008


Ben <bmilliron at gmail.com> wrote:

> Since strings are
> immutable I can't assign different values to a specific slice of the
> string. How can I accomplish this? 
> 
...
> #My Current Code
> 
> # read the data file in as a list
> F = open('C:\\path\\to\file', "r")
> List = F.readlines()
> F.close()
> 
> #Loop through the file and format each line
> a=len(List)
> while a > 0:
> 
>     List.insert(a,"2")
>     a=a-1
> 
> # write the changed data (list) to a file
> FileOut = open("C:\\path\\to\\file", "w")
> FileOut.writelines(List)
> FileOut.close()
> 
> Thanks for any help and thanks for helping us newbies,
> 

You probably don't want to use readlines. It is almost always cleaner just 
to iterate over the file itself.

You can't change an existing string, but creating a new string isn't 
exactly rocket science.

lines = []
for line in F:
    modified = line[:16] + "CHANGED" + line[23:]
    # or maybe
    modified = line.replace("1999999", "CHANGED")
    lines.append(modified)
FileOut.writelines(lines)


To modify a file inplace have a look at the fileinput module.



More information about the Python-list mailing list