Нужна помощь в создании TXT-файла в папке, которая находится в том же каталоге - PullRequest
1 голос
/ 15 мая 2019

Я довольно новичок в питоне.У меня проблема с работой, когда нам нужно проанализировать корпусы, а затем сравнить их.Мы также должны сохранить файлы в виде TXT-файла после того, как он был обработан с атрибутом, размером.

Поэтому мне нужно создать файл .txt в отдельной папке с именем trigram-models.Эта папка находится в том же каталоге, что и мой файл Python.Я думаю, что я должен использовать модуль OS, но я не уверен, как.

Вот мой код:

from langdetect import read_trigrams, trigram_table, write_trigrams
import os

def make_profiles(datafolder, profilefolder, size):    

    filelist = []
    for file in os.listdir('./training'):
        filelist.append(file)
    print(filelist)

    for file in filelist:           
        filen = "./training/"+file
        print("fi", filen)

        maketable = trigram_table(filen, size)

        readdata = read_trigrams(filen)
        #print("re", readdata)

        splitname = str(file).split('-')
        newname = splitname[0] + "." + str(size) + '.txt'

        endtable = write_trigrams(readdata, newname)

    return (endtable)

make_profiles("./training", "./trigram-models", 20)

Ответы [ 4 ]

0 голосов
/ 15 мая 2019

Что касается уточнения ответа toti08, вам следует заменить os.absdir на os.path.absdir.

filelist = [os.path.abspath(f) for f in os.listdir(data_folder)]

вместо

filelist = [os.abspath(f) for f in os.listdir(data_folder)]
0 голосов
/ 15 мая 2019

Прежде всего, обязательно сделайте отступ для всего кода в вашем методе, чтобы он был соответствующим образом заключен.

Вы также передаете относительные пути ( папка данных, папка профиля ) для ваших папок.в качестве аргументов метода, поэтому вы должны использовать их внутри метода.

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

file_path = '/'.join(profilefolder, newname)

with open(file_path, 'w') as ouf:
    ouf.write(endtable)

Возможно, вынужно заменить "endtable" на строковое представление ваших данных.

Надеюсь, это поможет.

0 голосов
/ 15 мая 2019

Ваша функция не использует аргумент profileFolder, где вы указываете имя выходного каталога. Поэтому прежде всего вам следует использовать эту информацию для создания папки перед обработкой ваших файлов.

Итак, первым делом нужно создать этот выходной каталог. Во-вторых, сохранить ваши файлы там, и для этого вам нужно добавить имя файла в выходной каталог. Примерно так:

def make_profiles(data_folder, output_folder, size):    

    filelist = []
    for file in os.listdir(data_folder):
        filelist.append(file)

    # Create output folder
    if not os.path.exists(output_folder):
        os.mkdir(output_folder)

    for file in filelist:           
        filen = "./training/"+file
        #print("fi", filen)

        splitname = str(file).split('-')

        # Create new file by appending name to output_folder
        newname = os.path.join(output_folder, splitname[0] + "." + str(size) + '.txt')


    return (endtable)

make_profiles(./training, './trigram-models', 20)

Обратите внимание, что вы также можете указать относительное имя папки (т.е. только "trigram-models") и затем создать выходной каталог, добавив это имя к текущему пути:

output_folder = os.path.join(os.getcwd(), output_folder)

Также (не связанный с вопросом) этот фрагмент кода может быть оптимизирован:

filelist = []
for file in os.listdir(data_folder):
    filelist.append(file)

os.listdir уже возвращает список, поэтому вы можете написать:

filelist = os.listdir(data_folder)

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

filelist = [os.path.abspath(f) for f in os.listdir(data_folder)]

, где вы в основном берете каждый файл, возвращаемый os.listdir, и добавляете его абсолютный путь к списку файлов. Делая это, вы можете избежать линии filen = "./training/"+file.

В итоге ваш код должен выглядеть примерно так:

def make_profiles(data_folder, output_folder, size):    

    filelist = [os.abspath(f) for f in os.listdir(data_folder)]

    # Create output folder
    if not os.path.exists(output_folder):
        os.mkdir(output_folder)

    for file in filelist:           
        splitname = str(file).split('-')

        # [...add other pieces of code]

        # Create new file by appending name to output_folder
        newname = os.path.join(output_folder, splitname[0] + "." + str(size) + '.txt')

        # [...add other pieces of code]
    return (endtable)

make_profiles(./training, './trigram-models', 20)
0 голосов
/ 15 мая 2019

Чтобы создать каталог, я бы использовал следующий формат, который основан на try / catch и предотвращает ошибку, если каталог уже существует:

dirName = 'tempDir'

try:
    # Create target Directory
    os.mkdir(dirName)
    print("Directory " , dirName ,  " Created ") 
except FileExistsError:
    print("Directory " , dirName ,  " already exists")

Чтобы изменить каталог, вы можете использовать следующее:

os.chdir(directoryLocation)

Я рекомендую прочитать главу 8 по автоматизации скучных вещей с помощью python .

Надеюсь, это поможет. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь спрашивать.

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