Как объединить строковое значение с каждой строкой в ​​текстовом файле Python - PullRequest
0 голосов
/ 10 мая 2018

У меня большой текстовый файл, он содержит 700 тыс. Строк. Я хочу объединить или добавить небольшую строку "/products/all.atom" к каждой отдельной строке.

Я попробовал этот код

enter code here
import os
import sys
import fileinput

print ("Text to search for:")
textToSearch = input( "> " ) 

print ("Text to replace it with:")
textToReplace = input( "> " )

print ("File to perform Search-Replace on:")
fileToSearch  = input( "> " )
#fileToSearch = 'D:\dummy1.txt'

tempFile = open( fileToSearch, 'r+' )

for line in fileinput.input( fileToSearch ):
if textToSearch in line :
    print('Match Found')
else:
    print('Match Not Found!!')
tempFile.write( line.replace( textToSearch, textToReplace ) )
tempFile.close()


input( '\n\n Press Enter to exit...' )

Но код не работает идеально, то, что я здесь делаю, это заменяю ".com" на ".com / products / all.atom", но когда я запускаю этот командный цикл становится бесконечным, и он записывает файл размером 10 ГБ .

Вот пример того, что я хочу:

store1.com > store1.com/products/all.atom
store2.com > store2.com/products/all.atom
store3.com > store3.com/products/all.atom

нажмите здесь, чтобы проверить текстовый файл

пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Попробуйте понимание списка и объединение строк:

with open('file.txt','r') as f:
    print([line.strip() + "/products/all.atom" for line in f])

Outout:

['store1.com/products/all.atom', 'store2.com/products/all.atom', 'store3.com/products/all.atom', 'store4.com/products/all.atom']

Обновленное решение:

Вот как вы напишите в новом файле:

with open('names','r') as f:
    data=[line.strip() + "/products/all.atom" for line in f]
    with open('new_file','w+') as write_f:
        for line_1 in data:
            write_f.write(line_1 + '\n')
0 голосов
/ 10 мая 2018

Преобразование просто, вы просто делаете str.replace строк from и to. Запишите во временный файл, чтобы не перезаписывать, пока вы еще над ним работаете, и переименовывайте его, когда закончите.

Метод file.writelines() берет итератор и вызывает его несколько раз, чтобы получить строки для записи. Я использовал генератор, который читает каждую строку файла и заменяет текст.

import os

print ("Text to search for:")
textToSearch = input( "> " ) 

print ("Text to replace it with:")
textToReplace = input( "> " )

print ("File to perform Search-Replace on:")
fileToSearch  = input( "> " )

outName = fileToSearch + ".tmp"

with open(fileToSearch) as infile, open(outName, 'w') as outfile:
    outfile.writelines(line.replace(textToSearch, textToReplace) for line in infile)

print("Lines replaced, do you want to overwrite original file? (y/n):")
replace = input("> ")
if replace.startswith ('y'):
    os.remove(fileToSearch)
    os.rename(outName, fileToSearch)

input( '\n\n Press Enter to exit...' )
0 голосов
/ 10 мая 2018
fo=open('sta.txt','r+') # open file for read    
lines=fo.read() # reading lines in file 
fo.close()  
fo=open('sta.txt','w') # open file for Write    
for i in lines.split('\n')[:-1]:  #split the lines (using \n)and avoid last one
    fo.write(i+' hai \n') # write new lines #replace 'hai with what you need to append
fo.close()
...