2016-03-13 2 views
0

У меня есть 48 файлов .rx.txt, и я пытаюсь их комбинировать с помощью Python. Я знаю, что когда вы объединяете файлы .rx.txt, вы должны включить "|" между файлами.Объединение файлов Regex в Python

Вот код, который я использую:

import glob 

read_files = filter(lambda f: f!='final.txt' and f!='result.txt', glob.glob('*.txt')) 


with open("REGEXES.rx.txt", "wb") as outfile: 
    for f in read_files: 
     with open(f, "rb") as infile: 
      outfile.write(infile.read()) 
      outfile.write('|') 

Но когда я пытаюсь запустить, что я получаю эту ошибку:

Traceback (most recent call last): 
    File "/Users/kosay.jabre/Desktop/Password Assessor/RegexesNEW/CombineFilesCopy.py", line 10, in <module> 
    outfile.write('|') 
TypeError: a bytes-like object is required, not 'str' 

Любые идеи о том, как я могу объединить мои файлы в один файл?

ответ

3

Ваш REGEXES.rx.txt открыт в двоичном режиме, но с outfile.write('|') вы пытаетесь записать в него строку вместо двоичного. Кажется, что все ваши файлы содержат текстовые данные, так вместо открытия их как двоичные файлы открывать их в виде текстов, а именно:

with open("REGEXES.rx.txt", "w") as outfile: 
    for f in read_files: 
     with open(f, "r") as infile: 
      outfile.write(infile.read()) 
      outfile.write('|') 
1

В python2.7.x ваш код будет работать нормально, но для Python3 .x вы должны добавить b префикс к строке outfile.write(b'|'), которая будет отмечать строку как двоичную строку, а затем мы сможем записать ее в режиме двоичного файла.

Тогда ваш код python3.x будет:

import glob 

read_files = filter(lambda f: f!='final.txt' and f!='result.txt', glob.glob('*.txt')) 


with open("REGEXES.rx.txt", "wb") as outfile: 
    for f in read_files: 
     with open(f, "rb") as infile: 
      outfile.write(infile.read()) 
      outfile.write(b'|') 
+1

использовать этот вариант, только если для какой-либо причине вам нужно использовать бинарный режим и python3.x в противном случае я рекомендую использовать решение, отправленный @Vader что совместим с ** python 2.x и 3.x ** –

+0

Это сработало, но я решил пойти с открытием в виде текста, потому что у меня действительно нет причин открываться в двоичном формате. – Kos

Смежные вопросы