把握文本处置技巧-启动文本剖析-经常使用-Python (把握文本处置的重要性)
在文本剖析的环节中,将原始数据转换为TXT文件十分关键,关键出于以下几个方面的思考:
1.格局便捷与一致:
2.便于文本预处置:
3.兼容性:
4.节俭资源:
5.便于文本开掘和形式识别:
6.可读性和可审核性:
7.数据荡涤:
将原始数据转换为TXT文件是成功有效和准确文本剖析的一个基本步骤,它协助简化和规范化文本剖析流程,从而提高剖析的效率和品质。以下代码可以用来将pdf文件转换为txt文件。
pdf2txt.py
#!/usr/bin/env/target=_blankclass=infotextkey>Python#该行命令通知操作系统经常使用Python解释器口头此文件importsys#导入sys模块,用于处置与Python解释器和运转时环境无关的操作frompdfminer.pdfdocumentimportPDFDocument#从pdfminer模块导入PDFDocument类,用于示意PDF文档frompdfminer.pdfparserimportPDFParser#从pdfminer模块导入PDFParser类,用于解析PDF文档frompdfminer.pdfinterpimportPDFResourceManager,PDFPageInterpreter#从pdfminer模块导入资源治理和页面解释类frompdfminer.pdfdeviceimportPDFDevice,TagExtractor#从pdfminer模块导入PDF设施和标签提取器类frompdfminer.pdfpageimportPDFPage#从pdfminer模块导入PDFPage类,用于示意PDF页面frompdfminer.converterimportXMLConverter,Converter,TextConverter#从pdfminer模块导入转换器类,用于将PDF转换为其余格局frompdfminer.cmapdbimportCMapDB#从pdfminer模块导入字符映射数据库类frompdfminer.layoutimportLAParams#从pdfminer模块导入规划剖析参数类frompdfminer.imageimportImageWriter#从pdfminer模块导入图像写入类#定义主函数,argv是一个蕴含命令行参数的列表defmn(argv):importgetopt#导入getopt模块,用于解析命令行参数#定义一个显示用法的外部函数defusage():print('usage:%s[-Ppassword][-ooutput][-ttext|html|xml|tag]''[-Ooutput_dir][-cencoding][-sscale][-Rrotation]''[-Ynormal|loose|exact][-ppagenos][-mmaxpages]''[-S][-C][-n][-A][-V][-Mchar_margin][-Lline_margin]''[-Wword_margin][-Fboxes_flow][-d]input.pdf...'%argv[0])return100#前往一个失误代码try:#经常使用getopt解析命令行参数(opts,args)=getopt.getopt(argv[1:],'dP:o:t:O:c:s:R:Y:p:m:SCnAVM:W:L:F:')exceptgetopt.GetoptError:returnusage()#假设解析失败,则显示用法并分开ifnotargs:returnusage()#假设没有提供非选项参数(例如输入文件),则显示用法并分开#初始化一些变量debug=0#调试级别password=b''#PDF明码pagenos=set()#要处置的页码集maxpages=0#最大页数outfile=None#输入文件名outtype=None#输入类型imagewriter=None#图像写入对象rotation=0#旋转角度stripcontrol=False#能否剥离控制字符layoutmode='normal'#规划形式encoding='utf-8'#编码形式pageno=1#页面号scale=1#缩放因子caching=True#能否缓存showpageno=True#能否显示页面号laparams=LAParams()#规划剖析参数对象for(k,v)inopts:#遍历选项和值ifk=='-d':debug+=1#设置调试级别elifk=='-P':password=v.encode('ascii')#设置明码elifk=='-o':outfile=v#设置输入文件名elifk=='-t':outtype=v#设置输入类型elifk=='-O':imagewriter=ImageWriter(v)#创立图像写入对象elifk=='-c':encoding=v#设置编码形式elifk=='-s':scale=float(v)#设置缩放因子elifk=='-R':rotation=int(v)#设置旋转角度elifk=='-Y':layoutmode=v#设置规划形式elifk=='-p':pagenos.update(int(x)-1forxinv.split(','))#降级页码集elifk=='-m':maxpages=int(v)#设置最大页数elifk=='-S':stripcontrol=True#启用剥离控制字符elifk=='-C':caching=False#禁用缓存elifk=='-n':laparams=None#禁用规划剖析参数elifk=='-A':laparams.all_texts=True#启用一切文本选项elifk=='-V':laparams.detect_vertical=True#启用垂直检测选项elifk=='-M':laparams.char_margin=float(v)#设置字符边距elifk=='-W':laparams.word_margin=float(v)#设置单词边距elifk=='-L':laparams.line_margin=float(v)#设置行边距elifk=='-F':laparams.boxes_flow=float(v)#设置框流#设置调试级别PDFDocument.debug=debugPDFParser.debug=debugCMapDB.debug=debugPDFPageInterpreter.debug=debug#创立PDF资源治理器对象rsrcmgr=PDFResourceManager(caching=caching)#依据输入类型和选项创立相应的PDF设施对象ifnotouttype:outtype='text'#默以为文本输入ifoutfile:ifoutfile.endswith('.htm')oroutfile.endswith('.html'):outtype='html'#假设输入文件名以.htm或.html开头,则设置为html输入elifoutfile.endswith('.xml'):outtype='xml'#假设输入文件名以.xml开头,则设置为xml输入elifoutfile.endswith('.tag'):outtype='tag'#假设输入文件名以.tag开头,则设置为tag输入elifouttype=='tag':device=TagExtractor(rsrcmgr,outfp)#假设输入类型为'tag',则创立TagExtractor对象else:returnusage()#假设不识别的输入类型,则显示用法并分开forfnameinargs:#遍历一切输入文件名withopen(fname,'rb')asfp:#以二进制读形式关上文件interpreter=PDFPageInterpreter(rsrcmgr,device)#创立PDF页面解释器对象#遍历PDF页面,失掉页面对象forpageinPDFPage.get_pages(fp,pagenos,maxpages=maxpages,password=password,caching=caching,check_extractable=True):page.rotate=(page.rotate+rotation)%360#设置页面旋转角度interpreter.process_page(page)#处置每个页面device.close()#封锁设施对象,监禁资源outfp.close()#封锁输入文件,监禁资源return#从主函数前往#审核此模块能否作为主模块运转if__name__=='__main__':sys.exit(main(sys.argv))#假设是,则调用main函数,并经常使用命令行参数列表作为参数
convertPDF.py
#!/usr/bin/envpython3"""ScripttoconvertPDFstotextfiles."""importunicodedata,os,pdf2txt,datetimeimportmultiprocessingdefconvertPDFToText(i,ID,newDir,fileNamePDF):print('Tryingtoconvert:'+str(i)+','+ID)#输入正在尝试转换的文件消息try:pdf2txt.main(['-o',newDir+'/'+ID+'.txt',fileNamePDF])#调用pdf2txt.main来转换PDF为文本print('Successfullyconverted:'+ID)#转换成功时的输入exceptExceptionase:print('Failedtoconvert:'+ID+f',Error:{e}')#转换失败时的输入defprocess_pdfs(pdf_list):withmultiprocessing.Pool(20)aspool:#创立一个蕴含20个进程的进程池pool.starmap(convertPDFToText,pdf_list)#经常使用starmap来并行处置pdf_list中的每个元素,每个元素都是一个元组,它将被解包为convertPDFToText的参数if__name__=='__main__':directory='../../Data/PDF/work'os.chdir(directory)#更改以后上班目录至PDF文件目录#指定保留转换后文件的目录newDir='../TXT/work'#os.makedirs(newDir)#创立新目录(假设须要的话)print('Placingconvertedfilesin:'+newDir)#输入转换后文件将被搁置的目录pdf_list=[]#创立一个空列表,用于保留将传递给convertPDFToText的参数元组i=0#初始化计数器forfileNamePDFinos.listdir('./'):#遍历以后目录中的一切文件i+=1#计数器递增iffileNamePDF.find(".pdf")==-1:#假设文件不是PDF,跳过continueID=fileNamePDF[:-4]#从文件名中失掉ID(去掉.pdf后缀)ifos.path.isfile('../TXT/'+ID+'.txt'):#假设曾经存在对应的文本文件,跳过continuepdf_list.end((i,ID,newDir,fileNamePDF))#将参数元组增加到pdf_list中process_pdfs(pdf_list)#调用process_pdfs函数,传递pdf_list以并行处置PDF文件
python对文本文件的读有哪些方法,写有哪些方法?
1 文件读取全文本操作在一定场景下我们需要把文本全部内容读取出来,进行处理。 python提供三种函数读取文件,分别是read readline readlines,read():读取文件的全部内容,加上参数可以指定读取的字符。 readline():读取文件的一行。 readlines():读取文件的所有行到内存中。 不同场景下我们可以选择不同函数对文件进行读取。 1.1 方法一file_name = input(请输入你要打开的文件的完整路径及名称)file= open(file_name, r)txt=()# 全文本的处理()使用read函数将文件中的内容全部读取,放在字符串变量txt中。 这样操作适合于文本较小,处理简单的情况,当文件较大时,这种方式处理时不合适的。 一次性读取较大的文件到内存中,会耗费较多的时间和资源。 这时候分批处理效果更好。 1.2 方法二file_name = input(请输入你要打开的文件的完整路径及名称)file= open(file_name, r)txt= (4)# 文本的处理while txt != txt= (4)# 批量文本处理()这种方法适合于分批处理文本信息,每次批量读入,批量处理,不会对内存造成较大的压力。 1.3 方法三file_name = input(请输入你要打开的文件的完整路径及名称)file= open(file_name, r)for line ():# 处理每一行数据()这种处理方式适合处理以行为分割特点的文本,并且文本较小,因为这种处理方式需要一次性把文件所有内容读取到内存中。 1.4 方法四file_name = input(请输入你要打开的文件的完整路径及名称)file= open(file_name, r) # 这里的file时文件句柄for line infile:# 处理每一行数据()这种方式和方法三中的区别是分行读入,逐行处理,不会一次性把文件所有内容都读入到内存中,对一些大文件的处理是很有效的。 2 文件写入文本操作文件写入有两种写入函数和一种辅助支持。 write():向文件中写入一个字符或者字节流writelines():将一个元素全为字符串的列表写入到文件中 需要注意的是,writelines写入列表元素的时候会把列表元素的内容拼接到一起写入,不会有换行和空格 。 seek(): 辅助写入函数offset偏移量参数代表含义如下0 - 文件开头1 - 当前位置2 - 文件结尾2.1 方法一file_name = input(, w+)text= hello world!file_(text)()2.2 方法二file_name = input(, w+)list= [中午,早上,晚上]file_(list)for line infile:# 读取写入的数据,这时候发现是没有任何内容的()我们增加一行代码就可以读取到写入的文件内容,利用seek()函数调整写操作指针的位置,可以实现写操作之后的正常读取。 file_name = input(, w+)list= [中午,早上,晚上]file_(list)file_(0) # 调整写的指针到文件的开始位置for line infile:# 读取写入的数据,这时候会读出一行写入的数据。 ()
使用python对txt文本进行分析和提取
实现的方法和详细的操作步骤如下:
1、首先,打开计算机上的pycharm编辑器,如下图所示,然后进入下一步。
2、其次,完成上述步骤后,在出现的窗口中编写有关该程序的相关注释,如下图所示,然后进入下一步。
3、接着,完成上述步骤后,创建一个新的变量,为“test8”,写入如下红框内的代码,如下图所示,然后进入下一步。
4、然后,完成上述步骤后,使用replace函数,写入如下红框中的代码,如下图所示,然后进入下一步。
5、随后,完成上述步骤后,使用“print”打印执行结果,如下图所示,然后进入下一步。
6、接着,完成上述步骤后,依次单击工具栏的“Run”-->“Run”选项,如下图所示,然后进入下一步。
7、最后,完成上述步骤后,“Run”该程序,出现语句“you name is luo”,如下图所示。这样,问题就解决了。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。