从文件夹中的文件中获取数据

时间:2015-04-30 21:17:37

标签: python directory

如何从放置在特定文件夹中的多个txt文件中获取数据。我开始用这个无法修复。它给出了一个错误,比如'没有这样的文件或目录:'。idea'(??) (假设我有一个A文件夹,其中有x.txt,y.txt,z.txt等等。我正在尝试从所有文件x,y,z中获取和打印信息)

def find_get(folder):
    for file in os.listdir(folder):
        f = open(file, 'r')
        for data in open(file, 'r'):
            print data

find_get('filex')

感谢。

4 个答案:

答案 0 :(得分:2)

如果您只想打印每一行:

import glob
import os

def find_get(path):
    for f in glob.glob(os.path.join(path,"*.txt")):
        with open(os.path.join(path, f)) as data:
            for line in data:
                print(line)

glob只会找到指定路径中的.txt个文件。

您的错误来自于未加入文件名的路径,除非文件位于您运行python代码的同一目录中,否则将无法找到没有完整路径的文件。另一个问题是你似乎有一个目录.idea,在尝试将其作为文件打开时也会出错。这也假设您实际上有权读取目录中的文件。

如果您的文件较大,我会避免全部读入内存和/或存储完整内容。

答案 1 :(得分:1)

首先确保将文件夹名称添加到文件名中,以便找到相对于脚本执行位置的文件。

为此,您希望使用os.path.join,正如其名称所示 - 加入路径。所以,使用a generator

def find_get(folder):
    for filename in os.listdir(folder):
        relative_file_path = os.path.join(folder, filename)
        with open(relative_file_path) as f:
            # read() gives the entire data from the file
            yield f.read()

# this consumes the generator to a list
files_data = list(find_get('filex'))

看看我们在消耗生成器的列表中得到了什么:

print files_data

生成可用于构造dict的元组可能更方便:

def find_get(folder):
    for filename in os.listdir(folder):
        relative_file_path = os.path.join(folder, filename)
        with open(relative_file_path) as f:
            # read() gives the entire data from the file
            yield (relative_file_path, f.read(), )

# this consumes the generator to a list
files_data = dict(find_get('filex'))

现在,您将拥有从文件名称到其内容的映射。

另外,请查看answer by @Padraic Cunningham。他提出了适用于这种情况的glob模块。

答案 2 :(得分:0)

完整变体:

import os

def find_get(path):
  files = {}
  for file in os.listdir(path):
    if os.path.isfile(os.path.join(path,file)):
      with open(os.path.join(path,file), "r") as data:
        files[file] = data.read()
  return files

print(find_get("filex"))

输出:

{'1.txt': 'dsad', '2.txt': 'fsdfs'}

您可以从该内容生成一个文件等

键入的事:

  • os.listdir返回没有完整路径的文件列表,因此您需要将初始路径与fount项连接起来进行操作。
  • 理想情况下可以使用dicts :)
  • os.listdir返回文件和文件夹,因此您需要检查列表项是否真的是文件

答案 3 :(得分:-1)

您应该检查文件是否实际是文件而不是文件夹,因为您无法打开文件夹进行阅读。此外,您不能只打开相对路径file,因为它位于文件夹下,因此您应该使用os.path.join获取正确的路径。检查以下内容:

import os
def find_get(folder):
    for file in os.listdir(folder):
        if not os.path.isfile(file):
            continue  # skip other directories
        f = open(os.path.join(folder, file), 'r')
        for line in f:
            print line