Ошибка типа: 'в <string>' требуется строка в качестве левого операнда, а не int - PullRequest
0 голосов
/ 02 июля 2019

Я сравниваю 2 файла и удаляю дубликаты из второго файла. Но выкидывает ошибку

2 файла. Нужно добавить одну цифру в конце первой строки и добавить в file2.txt. Но если измененная часть уже есть, то file2 остается нетронутым

import re
import sys
file1 = sys.argv[1]
file2 = sys.argv[2]
rx = r'(?<=:)(\d*)$'
with open(file1,'r') as fh:
    fh_n = fh.read()
    with open(file2, 'a+') as fw:
        x = fw.write(re.sub(rx , lambda x: str(int(x.group(0)) + 1) if len(x.group(1)) else "0", fh_n, 1, re.M))
        if x not in file2:
            fw.write(x)

file1.txt

python 2.7:
  Java 1.8:

python test.py file1.txt file2.txt

Ожидаемый выход даже после стольких казней

 python 2.7:0
      Java 1.8:

Я получил ошибку Traceback (последний вызов был последним): Файл "file.py", строка 15, в если x не в file2: Ошибка типа: для 'in' в качестве левого операнда требуется строка, а не int

1 Ответ

2 голосов
/ 02 июля 2019

Вам нужно прочитать содержимое файла2, чтобы найти в нем x.Ваш код должен быть:

import re
import sys
import os
file1 = sys.argv[1]
file2 = sys.argv[2]
rx = r'(?<=:)(\d*)$'
with open(file1,'r') as fh:
    fh_n = fh.read()
    with open(file2, 'a+') as fw:
        x = re.sub(rx , lambda x: str(int(x.group(0)) + 1) if len(x.group(1)) else "0", fh_n, 1, re.M)
        fw.seek(0, os.SEEK_SET)      # seek to the beginning of file before reading
        if x not in fw.read():
            fw.seek(0, os.SEEK_END)  # seek to end of file before writing
            fw.write(x)

Я добавил seek вызовов, потому что они необходимы между операциями чтения и записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...