【问题标题】:Create folders in directory from values in list. Python根据列表中的值在目录中创建文件夹。 Python
【发布时间】:2013-07-27 05:20:59
【问题描述】:

所以我要做的是:1)使用for循环在目录中创建一个文件夹,2)将输出文件写入该文件夹

我正在尝试将 for 循环中的值用作 input2 名称和文件夹名称的一部分

import os,re
values = ['alpha','123']

query_file = '/Users/name/Desktop/query.txt' # 'a\nb\nc\nd\n4\n5\n6\n'
reading_file = '/Users/name/Desktop/alpha.txt' #'abcdefghijklmnopqrstuvwxyz'
#reading_file = '/Users/name/Desktop/123.txt' #'123456789'

output_file='/Users/name/Desktop/output.txt'

def func(input1,input2,output):
    query=open(input1,'r').read().split('\n')
    reading = open(input2,'r').read()


    dir,file=os.path.split(input1)                
    temp_out= os.path.join(dir,output)            
    out_file=open(temp_out,'w') 

    for line in query:
        m = re.search(line,reading)
        if bool(m) == True:
            out_file.write( str( m.start() ) +'\n')


print func(query_file,reading_file,output_file)

因此它会创建一个名为 output.txt 的文件,该文件与输入位于相同的目录中,但我希望它(根据名称创建一个文件夹)并将该文件(在文件夹内)放置

现在,我必须一次做一个,并单独创建文件夹来放置文件。 . .我想使用 'values' 列表作为 'reading_file' 结尾(第一个以 'alpha' 结尾,后跟 .txt 扩展名,第二个导致 '123' 后跟 .txt)

最后应该有两个文件夹:

'/Users/name/Desktop/alpha/output.txt'

'/Users/name/Desktop/123/output.txt'

*请注意,输出应该不同,因为输入应该相对于 for 循环中调用的内容发生变化

如果这令人困惑,我深表歉意,但我正试图从我的脚本正在做的事情中尽可能地简化它。如果我需要澄清任何事情,请告诉我

【问题讨论】:

    标签: python list for-loop directory


    【解决方案1】:

    制作文件夹:

    import os
    os.mkdir(path[, mode])
    

    如果要制作目录如

    ~/dinosaur/llama/nested/etc/

    那么您应该使用os.makedirs(path[, mode]),因为它构建了确保有效所需的所有嵌套路径


    所以说你目前在~/tmp

    >>> import os
    >>> os.mkdir('llama')
    >>> os.mkdir('me')
    

    在该目录中创建文件夹。

    但是如果我们想要进入 ~/llama/me/ 但我们仍在 ~/tmp~ 中怎么办? 那么你可以使用两次 mkdir,或者你可以只使用

    >>> import os
    >>> os.makedirs('/home/llama/me')
    

    【讨论】:

    • 你在哪里指定文件夹的名称?
    • 那将是路径 - 这是文件夹的路径
    【解决方案2】:

    如果我理解您的问题,您只想遍历values 并输出在特殊文件夹(文件)中找到的位置(某物)。所以稍微修改你的代码

    import os, re
    values = ['alpha','123']
    
    BASE_PATH = '/Users/name/Desktop/'
    OUTPUT_FILE_NAME = 'output.txt'
    
    query_file = os.path.join(BASE_PATH, 'query.txt') # 'a\nb\nc\nd\n4\n5\n6\n'
    
    def func(query_file, reading_files):
        with open(query_file,'r') as f:
            query = f.read().split('\n')
    
        # TODO: check query
    
        for fbase in reading_files:
            in_file_name = os.path.join(BASE_PATH, '{}.txt'.format(fbase))
            out_dir = os.path.join(BASE_PATH, fbase)
            out_file_name = os.path.join(out_dir, OUTPUT_FILE_NAME)
    
            # TODO: check if out_dir exists but is regular file
            if not os.path.isdir(out_dir):
                os.mkdir(out_dir)
    
            with open(in_file_name, 'r') as in_file, open(out_file_name, 'w') as out_file:
                reading = in_file.read()
    
                for line in query:
                    m = re.search(line, reading)
                    if m is not None:
                        out_file.write("{}\n".format(str(m.start())))
    
    
    print(func(query_file, values))
    

    基本上work with fileswith 更容易;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2022-07-06
      • 2017-04-27
      • 1970-01-01
      相关资源
      最近更新 更多