简体   繁体   中英

How to reading .txt file and rewriting by adding space after specific position / index for each line in python

I want to read .txt file and add space after a specific position/index for each line. please consider below example for more details.

suppose my file contains

12345 678 91011 12 1314

In the above file, the first row contains space after a specific position/index [4] , then after position/index[8], after position/index[14] and after position/index[17]

Expected output : I want every row in the file is having space after a specific position. ie for the first row, I want to add space after index [2], then add space after index [6], then add space after index[11], then add space after index [21], and so on...

123 45 6 78 91 011 12 131 4

As a reminder, I don't want to replace elements but add a new space after a specific position/index.

reading .txt file and add space after a specific position/index, for each line in python.

with open("C:/path-to-file/file.txt", "r") as file:
    lines = file.read().split("\n")
    newlines = []
    for line in lines:
        line = line.rstrip()
        newline = line[:] + ' ' + line[:]   # this line is incorrect
        newlines.append(newline)
    with open("C:/path-to-file/file.txt", "w") as newfile:  
        newfile.write("\n".join(newlines)

add space after a specific position/index for each line a text file

suppose my file contains :

12345 678 91 011 12 1314

Expected output :

123 45 6 78 91 011 12 131 4

Consider this:

space_indecies = [2, 5, 8]

with open("C:/path-to-file/file.txt", "r") as file:
    lines = file.read().split("\n")
newlines = []
for line in lines:
    line = line.rstrip()
    for n, i in enumerate(space_indecies):
        line = line[:i + n] + ' ' + line[n + i:]
    newlines.append(line)
with open("C:/path-to-file/file.txt", "w") as newfile:  
    newfile.write("\n".join(newlines))

The i + n is needed, because the index where you want to insert your space shifts with every space inserted

Here is another solution using generator expressions.

If you are happy to provide the list of indices after each space rather than before , this will do the job:

line = '12345 678 91011 12 1314'
idx = [3, 7, 12, 22]
' '.join([line[i:j] for i, j in zip([None]+idx, idx+[None])])

which gives '123 45 6 78 91 011 12 131 4' .

Otherwise you would need to first add one to each index:

idx = [2, 6, 11, 21]
idx = [i+1 for i in idx]

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