I have below function & I am trying to get/store the contents of text file in another temp file(removing unnecessary line) with appending special character. But I also want the same content which is in temp text file with different special character next time but I am not able to do that.Below function is creating a temp file.To get desired output I need to create file every time with same function again which is not good way.Is there anything we can do without creating a temp/extra file and store the contents in return variable and append the special character whatever we want multiple times
import os
import re
def mainfest():
    pathfile = "abc_12.txt"
    with open(pathfile, 'r') as firstfile, open('tmp.txt', 'r') as s:
         for line in firstfile:
             if line.strip().startswith("-") or line.startswith("<"):
                print"ignore")
             elif re.search('\S', line):
                name = str(os.path.basename(line))
                s.write("*" +fname) 
def contents():
    temppath = "temp.txt"
    with open(temp path, 'r') as f:
         lines = f.readlines()
         lines+= lines 
         return lines   
manifest()
value = contents()
file abc_12.txt
---ABC-123 nice/abc.py xml/abc.py <<NOP-123 bacnice.py abc.py ---CDEF-345 jkl.oy abc.py
I want the contents of abc_12.txt file I can get in return something like that
abc.py abc.py nice.py abc.py jkl.oy abc.py
and manipulate them wherever I want similar to below output
Output 1:
* abc.py * abc.py * nice.py * abc.py * jkl.oy * abc.py
Output 2:
@@abc.py @@abc.py @@nice.py @@abc.py @@jkl.oy @@abc.py
Advertisement
Answer
Maybe first you should read file, search names and keep on list
def read_data():
    results = []
   
    with open("abc_12.txt") as infile:
         for line in infile:
             if line.strip().startswith(("-", "<")):  # `startswith`/`endswith` can use tuple 
                print("ignore:", line)
             elif re.search('\S', line):
                name = os.path.basename(line)
                results.append(name)
    return results
And later you can use this list to create temp file or other file
data = read_data()
with open('temp.txt', 'w') as outfile:
    for line in data:
        outfile.write(f'* {line}')
        #print(f'* {line}', end='')
        
with open('other.txt', 'w') as outfile:
    for line in data:
        outfile.write(f'@@{line}')
        #print(f'@@{line}', end='')
EDIT:
Minimal working code.
I used io.StringIO only to simulate file in memory – so everyone can simply copy and test it.
import os
import re
import io
text = r'''---ABC-123
nice/abc.py
xml/abc.py
<<NOP-123
bacnice.py
abc.py
---CDEF-345
jkl.oy
abc.py
'''
def read_data():
    results = []
   
    with io.StringIO(text) as infile:
    #with open("abc_12.txt") as infile:
        for line in infile:
            line = line.strip()
            if line:
                if line.startswith(("-", "<")):  # `startswith`/`endswith` can use tuple 
                    print("ignore:", line)
                else:
                    name = os.path.basename(line)
                    results.append(name)
    return results
data = read_data()
with open('temp.txt', 'w') as outfile:
    for line in data:
        outfile.write(f'* {line}n')
        print(f'* {line}')
        
with open('other.txt', 'w') as outfile:
    for line in data:
        outfile.write(f'@@{line}n')
        print(f'@@{line}')
EDIT:
If you don’t want to save in file then you still need for-loop to create string
data = read_data()
string_1 = ''
for line in data:
    string_1 += f'* {line}n'
        
string_2 = ''
for line in data:
    string_2 += f'@@{line}n'
or to create new list (and eventually string)
data = read_data()
list_1 = []
for line in data:
    list_1.append(f'* {line}')
        
list_2 = []
for line in data:
    list_2.append(f'@@{line}')
string_1 = "n".join(list_1)
string_2 = "n".join(list_2)