需要帮助,请在同一目录中的文件夹中创建txt文件

时间:2019-05-15 08:49:38

标签: python file text directory

我是python的新手。我有一个相互矛盾的问题,我们需要分析语料库,然后进行比较。使用属性(大小)处理后,我们还必须将文件另存为.txt文件。

因此,我需要在名为trigram-models的单独文件夹中创建一个.txt文件。 该文件夹与我的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 :(得分:0)

要创建目录,我将使用以下格式,该格式依赖于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)

我建议阅读chapter 8 in automating the boring stuff with python

我希望这会有所帮助。如有任何疑问,请随时询问。

答案 1 :(得分:0)

首先,请确保缩进方法中的所有代码,以使其适当地括起来。

您还将传递文件夹的相对路径( datafolder,profilefolder )作为方法参数,因此应在方法内部使用它们。

最后,要在文件夹中创建文件,我建议使用以下算法:

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

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

您可能需要用数据的字符串表示形式替换“ endtable”。

希望有帮助。

答案 2 :(得分:0)

您的函数未使用参数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)

答案 3 :(得分:0)

要弄清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)]