我是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)
答案 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)]