导出具有不同文件名的多个文件

时间:2017-01-20 00:16:10

标签: python import export filenames

假设我在文件名为n的目录中有file_1.txt, file_2.txt, file_3.txt .....file_n.txt个文件。我想将它们单独导入Python,然后对它们进行一些计算,然后将结果存储到n相应的输出文件中:file_1_o.txt, file_2_o.txt, ....file_n_o.txt.

我已经想出如何导入多个文件:

import glob
import numpy as np

path = r'home\...\CurrentDirectory'
allFiles = glob.glob(path + '/*.txt')
for file in allFiles:
    # do something to file
    ...
    ...
    np.savetxt(file, ) ???

不太确定如何在文件名之后附加_o.txt(或任何字符串),以便输出文件为file_1_o.txt

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码段来构建输出文件名吗?

parts = in_filename.split(".")
out_filename = parts[0] + "_o." + parts[1]  

我假设in_filename的格式为" file_1.txt"。
当然最好将"_o."(扩展名前面的后缀)放在变量中,以便您可以在一个地方随意更改,并且可以更轻松地更改该后缀。 在你的情况下,它意味着

import glob
import numpy as np

path = r'home\...\CurrentDirectory'
allFiles = glob.glob(path + '/*.txt')
for file in allFiles:
    # do something to file
    ...
    parts = file.split(".")
    out_filename = parts[0] + "_o." + parts[1]
    np.savetxt(out_filename, ) ???  

但是你需要小心,因为在你将out_filename传递给np.savetxt之前,你需要建立完整的路径,这样你可能需要像 np.savetxt(os.path.join(path, out_filename), )
或类似的东西。
如果您希望将更改基本上组合在一行中,并在变量中定义"后缀"正如我之前提到的,你可能会有像

这样的东西
hh = "_o." # variable suffix
..........
# inside your loop now
for file in allFiles:
    out_filename = hh.join(file.split("."))

使用另一种方法通过在分割列表上使用连接来做同样的事情,正如@NathanAck在他的回答中提到的那样。

答案 1 :(得分:0)

import os

#put the path to the files here
filePath = "C:/stack/codes/"
theFiles = os.listdir(filePath)

for file in theFiles:
    #add path name before the file
    file = filePath + str(file)

    fileToRead = open(file, 'r')
    fileData = fileToRead.read()

    #DO WORK ON SPECIFIC FILE HERE
    #access the file through the fileData variable
    fileData = fileData + "\nAdd text or do some other operations"

    #change the file name to add _o
    fileVar = file.split(".")
    newFileName = "_o.".join(fileVar)

    #write the file with _o added from the modified data in fileVar
    fileToWrite = open(newFileName, 'w')
    fileToWrite.write(fileData)

    #close open files
    fileToWrite.close()
    fileToRead.close()