Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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 如何将代码应用于目录中的多个文件以及目录中具有相同文档名称的输出文件?_Python_Python 2.7_Pdf_Text Files - Fatal编程技术网

Python 如何将代码应用于目录中的多个文件以及目录中具有相同文档名称的输出文件?

Python 如何将代码应用于目录中的多个文件以及目录中具有相同文档名称的输出文件?,python,python-2.7,pdf,text-files,Python,Python 2.7,Pdf,Text Files,我有一个包含pdf文件的目录,我想从中提取文本(每个文件都是单独的),并将它们放入与原始pdf文件同名的.txt文件中 例如: 目录X包含“name1.pdf”、“name2.pdf”和“name3.pdf” 我想做的是从这些文件中提取文本,并将它们放入名为“name1.txt”、“name2.txt”和“name3.txt”的文件中 到目前为止,我所拥有的: import textract import glob for pdf in glob.glob('//home//user//Des

我有一个包含pdf文件的目录,我想从中提取文本(每个文件都是单独的),并将它们放入与原始pdf文件同名的.txt文件中

例如: 目录X包含“name1.pdf”、“name2.pdf”和“name3.pdf”

我想做的是从这些文件中提取文本,并将它们放入名为“name1.txt”、“name2.txt”和“name3.txt”的文件中

到目前为止,我所拥有的:

import textract
import glob

for pdf in glob.glob('//home//user//Desktop//X//*.pdf'):
    text = textract.process(pdf)

txtFile = open(...,'w') # confused here
txtFile.write(text)

提前谢谢

首先,在第一个循环中的每次迭代都会覆盖文本变量

您可以使用
os.path.basename(path)
来获取文件名

基本上,您需要的是:

import os
for pdf in glob.glob('//home//user//Desktop//X//*.pdf'):
    text = textract.process(pdf)
    with open(os.path.basename(pdf)[:-4] + ".txt", "w") as f: 
         f.write(text) 

您可以在同一个循环中执行此操作,通过这种方式循环pdf,并使用os lib将每个文件写入txt文件,以获得basename。

首先,在第一个循环中的每次迭代都覆盖文本变量

您可以使用
os.path.basename(path)
来获取文件名

基本上,您需要的是:

import os
for pdf in glob.glob('//home//user//Desktop//X//*.pdf'):
    text = textract.process(pdf)
    with open(os.path.basename(pdf)[:-4] + ".txt", "w") as f: 
         f.write(text) 

您可以在同一个循环中执行此操作,这样您就可以循环使用pdf,并使用os lib将每个文件写入一个txt文件,以获得基本名称。

因此,我希望我正确理解您的意思,如果我理解,这应该会有所帮助

import fnmatch
import os

def walk_directories(self, Dir, pattern):
        root = Dir
        for root, directories, files in os.walk(Dir):
            for basename in files:
                if fnmatch.fnmatch(basename, pattern):
                    _file_path = os.path.join(root, basename)
        return _file_path
这是为了一个不同的目的,但它应该适合您的需要,以及,我得到了这个定位文件包含在“未知”子目录包含在一个单一的根目录。您只需要知道文件名和根目录(主文件夹),这也适用于部分文件名,基本上,如果您有三个名为“pdf1”、“pdf2”和“pdf3”的文件,则只需将其提供给pattern参数即可

老实说,如果你知道你正在使用的目录和文件,这看起来更像是杀伤力过大,你可以做得容易得多,但有了它,这是非常直接的

实际上,在“Dir”参数中提供文件夹路径,在Patter参数中提供文件名

walk_directories("C:\\Example folder", "Example File.pdf") # or simply "pdf1" etc..
您会注意到,此函数返回一个变量,在本例中,该变量是您正在使用的文件的完整路径

_path = walk_directories("C:\\example folder", "example file.pdf")
_然后,路径将包含

C:\\example folder\\example file.pdf
所以你可以说

def read(self, path):
        try:
            if os.path.isfile(path):
                with open(path, 'r') as inFile:
                    temp = inFile.read()
        except IOError as exception:
            raise IOError('%s: %s' % (path, exception.strerror))
        return temp
在这种情况下,“path”参数将是_path,返回的结果变量(temp)将是包含在文件中的文本,从这里开始,它就简单到

def write(self, path, text):
        try:
            if os.path.isfile(path):
                return None
            else:
                with open(path, 'w') as outFile:
                    outFile.write(text)
        except IOError as exception:
            raise IOError("%s: %s" % (path, exception.strerror))

        return None

因此,这里非常简单,还提供了包含要编写的文本的路径和变量。

因此,我希望我正确地理解了您的意思,如果我理解正确,这应该会有所帮助

import fnmatch
import os

def walk_directories(self, Dir, pattern):
        root = Dir
        for root, directories, files in os.walk(Dir):
            for basename in files:
                if fnmatch.fnmatch(basename, pattern):
                    _file_path = os.path.join(root, basename)
        return _file_path
这是为了一个不同的目的,但它应该适合您的需要,以及,我得到了这个定位文件包含在“未知”子目录包含在一个单一的根目录。您只需要知道文件名和根目录(主文件夹),这也适用于部分文件名,基本上,如果您有三个名为“pdf1”、“pdf2”和“pdf3”的文件,则只需将其提供给pattern参数即可

老实说,如果你知道你正在使用的目录和文件,这看起来更像是杀伤力过大,你可以做得容易得多,但有了它,这是非常直接的

实际上,在“Dir”参数中提供文件夹路径,在Patter参数中提供文件名

walk_directories("C:\\Example folder", "Example File.pdf") # or simply "pdf1" etc..
您会注意到,此函数返回一个变量,在本例中,该变量是您正在使用的文件的完整路径

_path = walk_directories("C:\\example folder", "example file.pdf")
_然后,路径将包含

C:\\example folder\\example file.pdf
所以你可以说

def read(self, path):
        try:
            if os.path.isfile(path):
                with open(path, 'r') as inFile:
                    temp = inFile.read()
        except IOError as exception:
            raise IOError('%s: %s' % (path, exception.strerror))
        return temp
在这种情况下,“path”参数将是_path,返回的结果变量(temp)将是包含在文件中的文本,从这里开始,它就简单到

def write(self, path, text):
        try:
            if os.path.isfile(path):
                return None
            else:
                with open(path, 'w') as outFile:
                    outFile.write(text)
        except IOError as exception:
            raise IOError("%s: %s" % (path, exception.strerror))

        return None

因此,这里非常简单,还提供了包含要写入的文本的路径和变量。

可能是没有人说过的重复。但希望你知道pdf不是纯文本文件?可能是没有人说过的重复。但希望你们知道pdf不是纯文本文件?对python来说还是很新的(2个月),我真的需要它来工作,它工作起来很有魅力!非常感谢你!我将不得不阅读更多关于操作系统模块的内容,因为我再次看到它的使用非常频繁。我尝试使用PowerPoints执行此操作,但它给了我以下错误:text=textract.process(ppt)NameError:name'ppt'不是defined@wra,您好,我必须查看整个代码并对其进行分析。我认为这是一个不同的问题,我建议为这个问题打开一个新的问题,包括所有的信息。对python来说仍然是非常新的(2个月),我真的需要这个工作,它就像一个魅力!非常感谢你!我将不得不阅读更多关于操作系统模块的内容,因为我再次看到它的使用非常频繁。我尝试使用PowerPoints执行此操作,但它给了我以下错误:text=textract.process(ppt)NameError:name'ppt'不是defined@wra,您好,我必须查看整个代码并对其进行分析。我认为这是一个不同的问题,我建议为此提出一个包含所有信息的新问题。