Заменить строку из файла в Python? - PullRequest
0 голосов
/ 21 января 2019

У меня есть файл, который содержит несколько номеров телефонов. Теперь я хочу преобразовать любую строку этого файла в файл VCF. Итак, сначала я определил модель шаблона для файла VCF, который имеет строку «THISNUMBER» И я хочу, чтобы открыть файл (тот, у которого есть номера телефонов) и заменить те строки в модель шаблона (THISNUMBER)

я пишу этот код Python:

template = """BEGIN:VCARD
VERSION:3.0
N:THISNUMBER;;;
FN:THISNUMBER
TEL;TYPE=CELL:THISNUM
END:VCARD"""

inputfile=open('D:/xxx/lst.txt','r')
counter=1
for thisnumber in inputfile:
    thisnumber=thisnumber.rstrip()
    output=template.replace('THISNUMBER',thisnumber)
    outputFile=('D:/xxx/vcfs/%05i.vcf' % counter,'w')
    outputFile.write(output)
    output.close
    print ("writing file %i") % counter
    counter +=1
    inputfile.close()

Но я даю эту ОШИБКУ:

Traceback (most recent call last):
 File "D:\xxx\a.py", line 16, in <module>
 outputFile.write(output)
 AttributeError: 'tuple' object has no attribute 'write'

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я напишу полноценный ответ, потому что я хочу обратиться к вашему стилю кода, если это нормально.

Возможно, проблема в том, что вы забыли позвонить open() на outputFile.Но позвольте мне представить вам хороший способ обработки файлов в Python.Таким образом, вам даже не нужно забывать звонить close().Все это делается с помощью менеджера контекста.Файл закрывается при выходе из оператора with.

template = """BEGIN:VCARD
VERSION:3.0
N:THISNUMBER;;;
FN:THISNUMBER
TEL;TYPE=CELL:THISNUM
END:VCARD"""

with open('D:/xxx/lst.txt', 'r') as inputfile:
    counter = 1
    for number in inputfile:
        number = number.rstrip()
        output = template.replace('THISNUMBER', number)
        with open('D:/xxx/vcfs/%05i.vcf' % counter, 'w') as outputFile:
            outputFile.write(output)

        print('writing file %i' % counter)
        counter += 1
0 голосов
/ 21 января 2019

изменение

outputFile=('D:/xxx/vcfs/%05i.vcf' % counter,'w')

до

outputFile = open ('D: /xxx/vcfs/%05i.vcf'% counter, 'w')

...