Вероятно, у вас будет меньше проблем, если использовать правильный способ чтения файла построчно (что просто для итерации по объекту файла), используя line.strip()
(без аргументов) для удаления символа новой строки (что бы это ни было) ) и помня, что в Python "\" является escape-символом, поэтому "\" на самом деле "\" (если вы хотите две обратные косые черты, используйте необработанную строку, например r"\\"
).
Кроме того, Python не гарантирует, что открытые файлы будут закрыты, поэтому вы должны позаботиться об этом.
Не проверено (конечно, поскольку вы не опубликовали свои исходные данные), но это в основном питонный эквивалент вашего сценария:
def main(p1, p2):
CELs=[]
CELpaths = {}
with open(p1) as f:
# skip first line
f.next()
for line in f:
# remove trailing whitespaces (including the newline character)
line = line.rstrip()
# I assume the `data[1:-1] was to skip an empty last line
if not line:
continue
# If you want a single backward slash,
# this would be better expressed as `r'\'`
# If you want two, you should use `r'\\'.
# AND if it's supposed to be a platform-dependant
# filesystem path separator, you should be using
# `os.path.sep` and/or `os.path` functions.
tabs = line.split('\\')
CELs.append(tabs[-1])
CELpaths[(tabs[-1])] = line
with open(p2) as f:
# no need to store the whole stuff in memory
for line in f:
line = line.strip()
if line in CELpaths:
print (CELpaths[line])
if __name__ == "__main__":
import sys
p1, p2 = sys.argv[1], sys.argv[2]
main(p1, p2)
Конечно, я не могу гарантировать, что это решит вашу проблему, поскольку вы не предоставили MCVE ...