如何从python中的文件文件夹中获取列表列表?

2024-10-02 20:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件文件夹。我想得到一个列表,其中每个元素都是所有文件行的列表(因此,列表列表)

我尝试了以下方法:

from os import listdir
folder = listdir("folder") 
for files in folder:
    individualFiles = open(f"folder/{files}", "r")
    alist = individualFiles.readlines() 

但这只会返回一个包含所有数据的巨大列表,而不是列表列表

我能做什么

我是一个初学者,我正在努力学习编程的逻辑,因此如果解决方案不需要花哨的函数,而是需要逻辑,我将不胜感激


Tags: 文件csv方法fromimport文件夹元素列表
3条回答

代码中的问题只是赋值给alist

alist = individualFiles.readlines()

附加到它,而不是

alist.append(individualFiles.readlines())

您必须在循环之前创建一个列表:alist = list()

这是您的代码,稍作修改,以解释逻辑:

from os import listdir

# Name of the folder containing the files
folder_path = "textfiles"

# Get a list of filenames
filenames = listdir(folder_path)

# List to store the content of the files
files_content = list()

# For each file
for filename in filenames:
    # Create the filepath
    file_path = f"{folder_path}/{filename}"

    # Open the file (using "with" for file opening will autoclose the file at the end. It's a good practice)
    with open(file_path, "r") as f:
        # Get the file content
        file_content = f.readlines()
        # Append the conten to the list
        files_content.append(file_content)

print(files_content)

一种非常简单的方法如下例所示

步骤/逻辑:

  • 收集文件。我使用glob库来实现这一点,因为glob返回完整文件路径,所以不需要自己构建它
  • 遍历列表中的每个文件
  • 使用with语句读取文件。这对于确保文件句柄自动关闭非常重要
  • 用文件内容的列表追加container列表

示例代码:

import os
from glob import glob

files = glob('/home/user/Desktop/list_of_files/*.csv')
container = []

for file in files:
    with open(file, 'r') as f:
        container.append(list(f))

档案:

['/home/user/Desktop/list_of_files/5.csv',
 '/home/user/Desktop/list_of_files/1.csv',
 '/home/user/Desktop/list_of_files/3.csv',
 '/home/user/Desktop/list_of_files/2.csv',
 '/home/user/Desktop/list_of_files/4.csv']

输出:

[['File content,5\n'],
 ['File content,1\n'],
 ['File content,3\n'],
 ['File content,2\n'],
 ['File content,4\n']]

您可以使用csv模块。这将返回文件夹中每个csv的行列表(每行都是自己的列表),跳过标题:

# folder/file1.csv

A,B,C,D
1,foo,bar,null
42,foo,baz,null
7,bar,for,x
from os import listdir
import csv

folder = 'data_folder'
files = listdir(folder)
files = [folder + '/' + file for file in files]

files_list = []

for file in files:    
    with open(file) as csv_file: 
        csv_reader = csv.reader(csv_file, delimiter=',')
        
        # skip header
        next(csv_reader, None)
        
        row_list = []
        for row in csv_reader:
            row_list.append(row)
        files_list.append(row_list)

输出:

[[['1', 'foo', 'bar', 'null'], # file1.csv
  ['42', 'foo', 'baz', 'null'],
  ['7', 'bar', 'for', 'x']],
 [['2', 'foo', 'bar', 'null'], # file2.csv
  ['42', 'foo', 'baz', 'null'],
  ['7', 'bar', 'for', 'x']],
 [['3', 'foo', 'bar', 'null'], # file3.csv
  ['42', 'foo', 'baz', 'null'],
  ['7', 'bar', 'for', 'x']]]
...

要访问file1.csv中的行,请执行以下操作:

file1 = files_list[0]
print(file1)

输出:

[['1', 'foo', 'bar', 'null'],
 ['42', 'foo', 'baz', 'null'],
 ['7', 'bar', 'for', 'x']]

相关问题 更多 >