I need to figure out something that is confusing me, hope someone can help. I have two text files with different information (these actually input files to run on Abaqus, but let’s call them .txt)
- MAIN.txt
filler line 1 filler line 2 filler line 3 *material,name=A density = 9 0,0 0,0 0,0 0,0 **-------------------------------------- FILLER LINE 5 FILLER LINE 6 FILLER LINE 7
and
- SUB.txt
*material,name=A density = 10 1,1 1,1 1,1 1,1 **--------------------------------------
I guess it is obvious what I want to do, write a script that creates a NEWFILE.txt which substitutes from the SUB.txt to MAIN.txt so that my NEWFILE.txt would look like this
*filler line 1 filler line 2 filler line 3 ***material,name=A density = 10 1,1 1,1 1,1 1,1 **--------------------------------------** FILLER LINE 5 FILLER LINE 6 FILLER LINE 7*
This is the code I have come up with, I have no issues creating a new text file, but I am unable to figure out how to swap that bit of text, from SUB.txt to the NEW.txt
mainFile = 'main.txt' subFile = 'sub.txt' outputFile = 'new.txt' marker1 = '*material,name=A' marker2 = '**--------------------------------------' with open(mainFile, 'r') as f1, open(subFile, 'r') as f2, open(outputFile, 'w') as f3: for line in f1: for line2 in f2: if line != marker1: f3.write(line) else ?
Advertisement
Answer
You read the whole file MAIN.txt
into a string, the whole file SUB.txt
into another. Then, find the positions of marker1
and marker2
in the main string, and substitute everything inbetween.
mainFile = 'main.txt' subFile = 'sub.txt' outputFile = 'new.txt' marker1 = '*material,name=A' marker2 = '**--------------------------------------' with open(mainFile, 'r') as f1, open(subFile, 'r') as f2, open(outputFile, 'w') as f3: main = f1.read() sub = f2.read() start = main.find(marker1) end = main.find(marker2) + len(marker2) main = main[:start + 1] + sub + main[end:] f3.write(main)
Done !