Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将300个文件合并为3个文件?_Python_Python 3.x_Dataframe - Fatal编程技术网

Python 如何将300个文件合并为3个文件?

Python 如何将300个文件合并为3个文件?,python,python-3.x,dataframe,Python,Python 3.x,Dataframe,我的文件夹里有一堆文件。全部由三种不同类型组成;三种不同的模式。我想把这些文件分成三种类型 “FFIEC CDR呼叫批量POR” “FFIEC CDR呼叫计划CI” “FFIEC CDR呼叫时间表ENT” 我想将这300个文件保存为3个CSV文件,基于文件名相似 这里是实际的文件名 FFIEC CDR Call Bulk POR 03312001.txt FFIEC CDR Call Bulk POR 03312002.txt ... FFIEC CDR Call Schedule CI 033

我的文件夹里有一堆文件。全部由三种不同类型组成;三种不同的模式。我想把这些文件分成三种类型

  • “FFIEC CDR呼叫批量POR”
  • “FFIEC CDR呼叫计划CI”
  • “FFIEC CDR呼叫时间表ENT”
  • 我想将这300个文件保存为3个CSV文件,基于文件名相似

    这里是实际的文件名

    FFIEC CDR Call Bulk POR 03312001.txt
    FFIEC CDR Call Bulk POR 03312002.txt
    ...
    FFIEC CDR Call Schedule CI 03312001.txt
    FFIEC CDR Call Schedule CI 03312002.txt
    ...
    FFIEC CDR Call Schedule ENT 03312001.txt
    FFIEC CDR Call Schedule ENT 03312002.txt
    
    我认为问题在于这一行:

    if x in f:
    
    下面是我正在测试的代码

    import os, glob
    import pandas as pd
    
    mylist = ['FFIEC CDR Call Bulk POR',
            'FFIEC CDR Call Schedule CI',
            'FFIEC CDR Call Schedule ENT']
    
    path = "C:\\Users\\ryans\\OneDrive\\Desktop\\schemas\\"
    
    all_files = glob.glob(os.path.join(path, "*.txt"))
    
    all_df = []
    for f in all_files: 
        for x in mylist:
            if x in f:
                print(x)
                df = pd.read_csv(f, delimiter='\t', skiprows=1) 
                df['file'] = os.path.basename(f)
                all_df.append(df) 
    
    df_append = pd.concat(all_df, ignore_index=True, sort=True)
    df_append.to_csv("C:\\Users\\ryans\\OneDrive\\Desktop\\" + x + ".csv")
    
    当我运行这段代码时,所有内容都被转储到一个CSV文件中。我想要三个单独的CSV文件,每个文件名对应一个相似/分组的文件名。我取得了一些进展,但我还没完全弄明白。

    坦率地说,这个问题似乎很原始,所以我不明白你们为什么会有这个问题

    您将所有文件放在同一个列表中

    all_df.append(df) 
    
    最后,它必须将所有文件写入一个CSV

    您应该为三种类型的文件创建三个列表。或者一本字典和三个文件列表

    all_df = {
        'FFIEC CDR Call Bulk POR': [],  # list for files `FFIEC CDR Call Bulk POR`
        'FFIEC CDR Call Schedule CI': [], # list for files `FFIEC CDR Call Schedule CI`
        'FFIEC CDR Call Schedule ENT': [], # list for files `FFIEC CDR Call Schedule ENT
    }
    
    然后您可以使用
    x
    将文件放入正确的列表中

    all_df[ x ].append(df) 
    
    loop
    之后,您可以使用另一个循环来保存三个文件

    for x in mylist:
        # use `all_df[x]
        df_append = pd.concat(all_df[x], ignore_index=True, sort=True)
        df_append.to_csv("C:\\Users\\ryans\\OneDrive\\Desktop\\" + x + ".csv")
    


    如果您认为问题在于
    如果f中的x:
    那么为什么不使用
    打印(x,f,x in f)
    来检查变量中的内容,如果
    。。。在…
    中给出了预期的结果。如果它给出了错误的结果,那么你必须使用不同的东西。简而言之:使用
    print()
    调试代码。或者学习使用real Debugger。您的问题是,您将所有文件添加到同一个
    all_df.append(df)
    -并且它必须将所有文件添加到一个文件中。坦白说,我不知道你为什么没看到。为此,您应该使用三种不同的列表-如果
    all\u POR
    all\u CI
    all\u ENT
    ,并将不同的文件添加到不同的列表中。循环之后,您应该运行
    pd.concat(all\u POR).to\u csv(“POR.csv”)
    pd.concat(all\CI).to\u csv(“CI.csv”)
    pd.concat(all\ENT).to\u csv(“ENT.csv”)
    最终,您可以使用一个字典和三个文件列表-
    all\df={'FFIEC CDR Call Bulk POR':[],'FFIEC CDR呼叫计划CI':[],'FFIEC CDR呼叫计划ENT';[]}
    并且应该更容易放置文件
    所有的_df[x]。附加(df)
    ,这在furas中非常有效。非常感谢!!!有时候这些事情对我来说并不明显,或者我不会问这些问题。我的教育是金融学,不是计算机科学。我通过阅读一些书籍、浏览博客、谷歌搜索等方式了解了我所知道的。对不起,在写答案之前,我检查了你的个人资料,你的Python声誉>13000,答案>2000,答案>600,所以我认为你更有经验。我的背景是VBA和SQL。我在2013年左右偶然发现了Python。Python与VBA和SQL完全不同。我知道Python中的一些东西,但有很多我不知道。如果我能自己想出一个解决办法,我不会在这里问任何问题。我在这方面帮助别人,得到了一些好处。我觉得我的答案是100%正确的,但由于某些原因,我的很多答案都没有通过投票。再次感谢。这是一个巨大的帮助,它将节省我很多时间!!!
    import os, glob
    import pandas as pd
    
    mylist = [
        'FFIEC CDR Call Bulk POR',
        'FFIEC CDR Call Schedule CI',
        'FFIEC CDR Call Schedule ENT'
    ]
    
    path = "C:\\Users\\ryans\\OneDrive\\Desktop\\schemas\\"
    
    all_files = glob.glob(os.path.join(path, "*.txt"))
    
    all_df = {
        'FFIEC CDR Call Bulk POR': [],  # list for files `FFIEC CDR Call Bulk POR`
        'FFIEC CDR Call Schedule CI': [], # list for files `FFIEC CDR Call Schedule CI`
        'FFIEC CDR Call Schedule ENT': [], # list for files `FFIEC CDR Call Schedule ENT
    }
    
    # --- first loop ---
    
    for f in all_files: 
        for x in mylist:
            if x in f:
                print(x)
                df = pd.read_csv(f, delimiter='\t', skiprows=1) 
                df['file'] = os.path.basename(f)
                all_df[x].append(df) 
    
    # --- second loop ---
    
    for x in mylist:
        # use `all_df[x]
        df_append = pd.concat(all_df[x], ignore_index=True, sort=True)
        df_append.to_csv("C:\\Users\\ryans\\OneDrive\\Desktop\\" + x + ".csv")