有没有一种方法可以使用Python从目录中的所有文件中加载数据?

时间:2019-04-17 15:12:28

标签: python python-3.x glob

我的问题:是否可以使用Python从目录中的所有文件中加载数据

输入:获取我给定目录(wow.txt,testting.txt等)中的所有文件

过程:我想通过def函数运行所有文件

输出:我希望输出为下面的所有文件名及其各自的内容。例如:

/home/file/wow.txt “所有内容” /home/file/www.txt “其所有内容”


这是我的代码:

# Import Functions
import os
import sys

# Define the file path
path="/home/my_files"
file_name="wow.txt"

#Load Data Function
def load_data(path,file_name):
    """
    Input  : path and file_name
    Purpose: loading text file
    Output : list of paragraphs/documents and
             title(initial 100 words considered as title of document)
    """
    documents_list = []
    titles=[]
    with open( os.path.join(path, file_name) ,"rt", encoding='latin-1') as fin:
        for line in fin.readlines():
            text = line.strip()
            documents_list.append(text)
    print("Total Number of Documents:",len(documents_list))
    titles.append( text[0:min(len(text),100)] )
    return documents_list,titles

#Output
load_data(path,file_name)

这是我的输出:

enter image description here


我的问题是我的输出仅包含一个文件并显示其内容。显然,我在代码中将路径和文件名定义为一个文件,但是我对如何编写路径以加载所有文件并分别输出其每个内容感到困惑。有什么建议吗?

6 个答案:

答案 0 :(得分:3)

尝试一下:

import glob

for file in glob.glob("test/*.xyz"):
    print(file)

如果我的目录名称是“ test”,并且其中有很多xyz文件...

答案 1 :(得分:3)

使用glob

import glob
files = glob.glob("*.txt")           # get all the .txt files

for file in files:                   # iterate over the list of files
    with open(file, "r") as fin:     # open the file
        # rest of the code

使用os.listdir()

import os
arr = os.listdir()    
files = [x for x in arr if x.endswith('.txt')]

for file in files:                   # iterate over the list of files
    with open(file, "r") as fin:     # open the file
       # rest of the code

答案 2 :(得分:0)

您可以使用glob和熊猫

将熊猫作为pd导入 导入glob

path = r'some_directory' # use your path
all_files = glob.glob(path + "/*.txt")

li = []

for filename in all_files:
    #read file here
    # if you decide to use pandas you might need to use the 'sep' paramaeter as well
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)

# get it all together
frame = pd.concat(li, axis=0, ignore_index=True)

答案 3 :(得分:0)

我将利用您已经编写的功能,因此请使用以下内容:

data = []
path="/home/my_files"
dirs = os.listdir( path )
for file in dirs:
    data.append(load_data(path, file))

在这种情况下,您将在列表data中拥有所有数据。

答案 4 :(得分:0)

嗨,您可以在listdir上使用for循环:

os.listdir(<path of your directory>)

这会为您提供目录中的文件列表,但也会为您提供该目录中的文件夹名称

答案 5 :(得分:0)

尝试首先生成文件列表,然后将其传递给函数的修改版本。

def dir_recursive(dirName):
    import os
    import re

    fileList = list()
    for (dir, _, files) in os.walk(dirName):
         for f in files:
             path = os.path.join(dir, f)
             if os.path.exists(path):
                 fileList.append(path)

    fList = list()
    prog = re.compile('.txt$')
    for k in range(len(fileList)):
        binMatch = prog.search(fileList[k])
        if binMatch:
            fList.append(binMatch.string)

    return fList

def load_data2(file_list):
    documents_list = []
    titles=[]
    for file_path in file_list:
        with open( file_path ,"rt", encoding='latin-1') as fin:
            for line in fin.readlines():
                text = line.strip()
                documents_list.append(text)
    print("Total Number of Documents:",len(documents_list))
    titles.append( text[0:min(len(text),100)] )
    return documents_list,titles

# Generate a file list & load the data from it
file_list = dir_recursive(path)
documents_list, titles = load_data2(file_list)