Replace a word in a file

后端 未结 4 1588
被撕碎了的回忆
被撕碎了的回忆 2021-01-23 04:36

I am new to Python programming...

I have a .txt file....... It looks like..

0,Salary,14000

0,Bonus,5000

0,gift,6000

I want to to replace

相关标签:
4条回答
  • 2021-01-23 05:13
    o=open("output.txt","w")
    for line in open("file"):
        s=line.split(",")
        s[0]="1"
        o.write(','.join(s))
    o.close()
    

    Or you can use fileinput with in place edit

    import fileinput
    for line in fileinput.FileInput("file",inplace=1):
        s=line.split(",")
        s[0]="1"
        print ','.join(s)
    
    0 讨论(0)
  • 2021-01-23 05:19

    I know that you're asking about Python, but forgive me for suggesting that perhaps a different tool is better for the job. :) It's a one-liner via sed:

    sed 's/^0,/1,/' yourtextfile.txt > output.txt
    

    This applies the regex /^0,/ (which matches any 0, that occurs at the beginning of a line) to each line and replaces the matched text with 1, instead. The output is directed into the file output.txt specified.

    0 讨论(0)
  • 2021-01-23 05:24
    inFile = open("old.txt", "r")
    outFile = open("new.txt", "w")
    for line in inFile: 
        outFile.write(",".join(["1"] + (line.split(","))[1:]))
    
    inFile.close()
    outFile.close()
    

    If you would like something more general, take a look to Python csv module. It contains utilities for processing comma-separated values (abbreviated as csv) in files. But it can work with arbitrary delimiter, not only comma. So as you sample is obviously a csv file, you can use it as follows:

    import csv
    reader = csv.reader(open("old.txt"))
    writer = csv.writer(open("new.txt", "w"))
    writer.writerows(["1"] + line[1:] for line in reader)
    

    To overwrite original file with new one:

    import os
    os.remove("old.txt")
    os.rename("new.txt", "old.txt")
    

    I think that writing to new file and then renaming it is more fault-tolerant and less likely corrupt your data than direct overwriting of source file. Imagine, that your program raised an exception while source file was already read to memory and reopened for writing. So you would lose original data and your new data wouldn't be saved because of program crash. In my case, I only lose new data while preserving original.

    0 讨论(0)
  • 2021-01-23 05:26
    f = open(filepath,'r')
    data = f.readlines()
    f.close()
    
    edited = []
    for line in data:
        edited.append( '1'+line[1:] )
    
    f = open(filepath,'w')
    f.writelines(edited)
    f.flush()
    f.close()
    

    Or in Python 2.5+:

    with open(filepath,'r') as f:
       data = f.readlines()
    
    with open(outfilepath, 'w') as f:
       for line in data:
          f.write( '1' + line[1:] )
    

    This should do it. I wouldn't recommend it for a truly big file though ;-) What is going on (ex 1):

    1: Open the file in read mode

    2,3: Read all the lines into a list (each line is a separate index) and close the file.

    4,5,6: Iterate over the list constructing a new list where each line has the first character replaced by a 1. The line[1:] slices the string from index 1 onward. We concatenate the 1 with the truncated list.

    7,8,9: Reopen the file in write mode, write the list to the file (overwrite), flush the buffer, and close the file handle.

    In Ex. 2:

    I use the with statement that lets the file handle closing itself, but do essentially the same thing.

    0 讨论(0)
提交回复
热议问题