как открыть и прочитать несколько файлов .txt - PullRequest
0 голосов
/ 05 апреля 2019

Этот вопрос был задан ранее другом, но мы не получили ответа.

Нам нужно открыть и прочитать 35 текстовых файлов с расширением .txt из моего каталога.Цель открытия и чтения этих файлов состоит в том, чтобы поместить все тексты в один файл по порядку.Файлы пронумерованы от 1 до 35 (например, Chapter1.txt, Chapter2.txt .... Chapter35.txt)

Я пробовал перебирать все файлы моего каталога, открывая и читая их, чтобы добавить ихсписок, но я всегда получаю сообщение об ошибке, которое не имеет смысла, потому что все файлы находятся в каталоге:

Traceback (most recent call last):
  File "/Users/nataliaresende/Dropbox/PYTHON/join_files.py", line 
27, in <module>
    join_texts()
  File "/Users/nataliaresende/Dropbox/PYTHON/join_files.py", line 
14, in join_texts
    with open (file) as x:
FileNotFoundError: [Errno 2] No such file or directory: 
'Chapter23.txt'

import sys
import os
from pathlib import Path

def join_texts():

    files_list=[]

    files_directory = Path(input('Enter the path of the files: '))

    for file in os.listdir(files_directory):
        for f in file:
            with open (file) as x:
                y=x.read()
                files_list.append(y)
    a=' '.join(files_list)
    print(a)

join_texts()

Мне нужно создать окончательный файл, содержащий содержимое всех этих файлов .txtвключены последовательно.Может ли кто-нибудь помочь мне с кодированием?

Ответы [ 3 ]

1 голос
/ 05 апреля 2019

Используйте следующий код, если хотите объединить chapter1.txt, chapter2.txt, chapter3.txt ... и так далее до chapter35.txt:

import os

def joint_texts():

    files_directory = input('Enter the path of the files: ')
    result = []
    for chapter in range(35):
        file = os.path.join(files_directory, 'chapter{}.txt'.format(chapter+1))
        with open(file, 'r') as f:
            result.append(f.read())
    print(' '.join(result))

joint_texts()

Тест:

Enter the path of the files: /Users/nataliaresende/Dropbox/XXX
File1Content File2Content File3Content ... File35Content
0 голосов
/ 05 апреля 2019

Вы можете использовать shutil.copyfileobj:

import os
import shutil

files = [f for f in os.listdir('path/to/files') if '.txt' in f]

with open('output.txt', 'wb') as output:
    for item in files:
        with open(item, 'rb') as current:
            shutil.copyfileobj(current, output)
            output.write(b'\n')

Предполагается, что вам нужны все текстовые файлы в указанном каталоге;если нет, измените условие if

0 голосов
/ 05 апреля 2019

Мне нравится предлагать пользователю открыть каталог, а не вводить имя каталога.

import os
from PySide import QtGui, QtCore

app = QtGui.QApplication(sys.argv)
first_file = unicode(QtGui.QFileDialog.getOpenFileName()[0])
app.quit()
pathname = first_fname[:(first_fname.rfind('/') + 1)]
file_list = [f for f in os.listdir(pathname) if f.lower().endswith('.txt')]
file_list.sort() #you will need to be careful here - this will do alphabetically so you might need to change chapter1.txt to chapter01.txt etc 

Это должно решить вашу проблему «мне нужны файлы в списке», а не проблему «объединения файлов в один»

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