簡體   English   中英

如何將文件夾中的多個文本文件加載到python列表變量中

[英]How to load multiple text files from a folder into a python list variable

我有一個充滿文本文檔的文件夾,其中的文本需要加載到單個列表變量中。

列表的每個索引,都應該是每個文檔的全文。

到目前為止,我有這段代碼,但效果不佳。

dir = os.path.join(current_working_directory, 'FolderName')
file_list = glob.glob(dir + '/*.txt')
corpus = [] #-->my list variable
for file_path in file_list:
    text_file = open(file_path, 'r')
    corpus.append(text_file.readlines()) 
    text_file.close()

有一個更好的方法嗎?

編輯:用文本閱讀功能( readlines() )替換了 csv 閱讀功能( read_csv )。

您只需要read()每個文件並將其附加到您的corpus列表中,如下所示:

import glob
import os

file_list = glob.glob(os.path.join(os.getcwd(), "FolderName", "*.txt"))

corpus = []

for file_path in file_list:
    with open(file_path) as f_input:
        corpus.append(f_input.read())

print(corpus)

每個列表條目將是每個文本文件的全部內容。 請注意,使用readlines()將為您提供每個文件的行列表,而不是原始文本。

使用列表理解

file_list = glob.glob(os.path.join(os.getcwd(), "FolderName", "*.txt"))

corpus = [open(file).read() for file in file_list]

但是這種方法最終可能會占用更多資源,因為沒有with部分可以自動關閉每個文件。

  • 使用pathlib模塊
  • 使用Path()創建Path()pathlib對象(或使用.cwd() ),並使用.glob (或.rglob() )查找與特定模式匹配的文件。
    • files = (Path().cwd() / 'FolderName').glob('*.txt')
      • /用於將文件夾(擴展)添加到pathlib對象。
    • 備擇方案:
      • files = Path('./FolderName').glob('*.txt')
      • files = Path('e:/PythonProjects/stack_overflow/t-files/').glob('*.txt')
  • Path.read_text()可用於將文本讀入list ,而無需使用.open()
    • text = [f.read_text() for f in files]
    • 備擇方案:
      • text = [f.open().read() for f in files]
      • text = [f.open().readlines() for f in files] - 創建一個文本list lists
from pathlib import Path

# get the files
files = (Path().cwd() / 'FolderName').glob('*.txt')

# write the text from each file into a list with a list comprehension
text = [f.read_text() for f in files]

for-loop替代方案

選項1

files = Path('./FolderName').glob('*.txt')

text = list()

for file in files:
    text.append(file.read_text())

選項 2

  • Path.open().read()可用於打開文件文本並將其讀入列表。
files = Path('./FolderName').glob('*.txt')

text = list()

for file in files:
    with file.open() as f:
        text.append(f.read())

我發現這是一種更簡單的方法:

    import glob


    corpus = []

    file_list = glob.glob("Foldername/*.txt")
    for file_path in file_list:
        with open(file_path, 'r') as file_input:
           corpus.append(file_input.read())
    print (corpus)
import os
import shutil
import csv
import sys

csv_file = "card.csv"

with open(csv_file, 'r') as f:
    reader = csv.reader(f)
    for i, row in enumerate(reader):
        if i == 0:
            print(i)
            pass    # Skip header row
        else:
            filename,filepath,x,y,w,h = row

            file2 = filename + ".txt"    
            file1 = open(file2,"a")#append mode 
            file1.write("%s\n%s\n%s\n%s\n" % (x, y, w,h)) 
            file1.close() 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM