【问题标题】:Python regex - OSError: [Errno 22] Invalid argument:Python 正则表达式 - OSError:[Errno 22] 无效参数:
【发布时间】:2018-12-28 06:52:42
【问题描述】:

尝试对一些文件批量运行正则表达式。

正则表达式代码:

import re


def DOCtoSTRING(path):

   return text

def valuesHextractor(text):
   STRING =""
   #let's find pacient personal info
   regex = re.compile('CONSULTAŢIE(?s).*EXAMENUL')
   pacientdata=regex.search(text)
   pacientinfo = re.sub('[A-Z]+:',"",pacientdata[0])
   STRING=STRING+pacientinfo.strip("CONSULTAŢIE").strip("EXAMENUL")+" "

   #values
   regex = re.compile('EXAMENUL OFTALMOLOGIC:(?s).*TRATAMENT')
   pacientvalues=regex.search(text)

   #AV OD
   #fc
   regex=re.compile("1.AV.*OD.*?fc[;\.\+\- 0-9]*")
   AVfc=regex.search(pacientvalues[0])
   AVODfc=re.sub("1.AV.*OD.*?fc[;\. 0-9]*?","",AVfc[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVODfc)==None:
       AVODfc="None"
   STRING=STRING+AVODfc+" "
   #cc
   regex=re.compile("1.AV.*OD.*?cc[;\.\+\- 0-9]*")
   AVcc=regex.search(pacientvalues[0])
   AVODcc=re.sub("1.AV.*OD.*?cc[;\. 0-9]*?","",AVcc[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVODcc)==None:
       AVODcc="None"
   STRING=STRING+AVODcc+" "
   #cyl
   regex=re.compile("1.AV.*OD.*?cyl[;\.\+\- 0-9]*")
   AVcyl=regex.search(pacientvalues[0])
   AVODcyl=re.sub("1.AV.*OD.*?cyl[;\. 0-9]*?","",AVcyl[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVODcyl)==None:
       AVODcyl="None"
   STRING=STRING+AVODcyl+" "
   #ax
   regex=re.compile("1.AV.*OD.*?ax[;\.\+\- 0-9]*")
   AVax=regex.search(pacientvalues[0])
   AVODax=re.sub("1.AV.*OD.*?ax[;\. 0-9]*?","",AVax[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVODax)==None:
       AVODax="None"
   STRING=STRING+AVODax+" "

   #AV OS
   #fc
   regex=re.compile("1.AV.*OS.*?fc[;\. 0-9]*")
   AVfc=regex.search(pacientvalues[0])
   AVOSfc=re.sub("1.AV.*OS.*?fc[;\. 0-9]*?","",AVfc[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOSfc)==None:
       AVOSfc="None"
   STRING=STRING+AVOSfc+" "
   #cc
   regex=re.compile("1.AV.*OS.*?cc[;\.\+\- 0-9]*")
   AVcc=regex.search(pacientvalues[0])
   AVOScc=re.sub("1.AV.*OS.*?cc[;\. 0-9]*?","",AVcc[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOScc)==None:
       AVOScc="None"
   STRING=STRING+AVOScc+" "
   #cyl
   regex=re.compile("1.AV.*OS.*?cyl[;\.\+\- 0-9]*")
   AVcyl=regex.search(pacientvalues[0])
   AVOScyl=re.sub("1.AV.*OS.*?cyl[;\. 0-9]*?","",AVcyl[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOScyl)==None:
       AVOScyl="None"
   STRING=STRING+AVOScyl+" "
   #ax
   regex=re.compile("1.AV.*OS.*?ax[;\.\+\- 0-9]*")
   AVax=regex.search(pacientvalues[0])
   AVOSax=re.sub("1.AV.*OS.*?ax[;\. 0-9]*?","",AVax[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOSax)==None:
       AVOSax="None"
   STRING=STRING+AVOSax+" "


############From here ignore names check only the #name

####### DP
   regex=re.compile("1.AV.*OS.*?DP=[;\.\+\- 0-9]*")
   AVax=regex.search(pacientvalues[0])
   AVOSax=re.sub("1.AV.*OS.*?DP=[;\. 0-9]*?","",AVax[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOSax)==None:
       AVOSax="None"
   DP=AVOSax

##########

   #RO OD
   #cyl
   regex=re.compile("2.RO.*OD.*?cyl[;\.\+\- 0-9]*")
   AVcyl=regex.search(pacientvalues[0])
   AVODcyl=re.sub("2.RO.*OD.*?cyl[;\. 0-9]*?","",AVcyl[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVODcyl)==None:
       AVODcyl="None"
   STRING=STRING+AVODcyl+" "
   #ax
   regex=re.compile("2.RO.*OD.*?ax[;\.\+\- 0-9]*")
   AVax=regex.search(pacientvalues[0])
   AVODax=re.sub("2.RO.*OD.*?ax[;\. 0-9]*?","",AVax[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVODax)==None:
       AVODax="None"
   STRING=STRING+AVODax+" "


   #RO OS
   #cyl
   regex=re.compile("2.RO.*OS.*?cyl[;\.\+\- 0-9]*")
   AVcyl=regex.search(pacientvalues[0])
   AVOScyl=re.sub("2.RO.*OS.*?cyl[;\. 0-9]*?","",AVcyl[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOScyl)==None:
       AVOScyl="None"
   STRING=STRING+AVOScyl+" "
   #ax
   regex=re.compile("2.RO.*OS.*?ax[;\.\+\- 0-9]*")
   AVax=regex.search(pacientvalues[0])
   AVOSax=re.sub("2.RO.*OS.*?ax[;\. 0-9]*?","",AVax[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOSax)==None:
       AVOSax="None"
   STRING=STRING+AVOSax+" "

   #3.PIO OD
   regex=re.compile("3.PIO.*OD=[;\.\+\- 0-9]*")
   AVfc=regex.search(pacientvalues[0])
   AVODfc=re.sub("3.PIO.*?OD=[;\. 0-9]*?","",AVfc[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVODfc)==None:
       AVODfc="None"
   STRING=STRING+AVODfc+" "

   #3.PIO OS
   regex=re.compile("3.PIO.*?OS=[;\. 0-9]*")
   AVfc=regex.search(pacientvalues[0])
   AVOSfc=re.sub("3.PIO.*?OS=[;\. 0-9]*?","",AVfc[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOSfc)==None:
       AVOSfc="None"
   STRING=STRING+AVOSfc+" "


   #4.FO OD
   regex=re.compile("4.FO(?s).*OD:[;\.\+\- 0-9]*")
   AVfc=regex.search(pacientvalues[0])
   AVODfc=re.sub("4.FO(?s).*?OD:[;\. 0-9]*?","",AVfc[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVODfc)==None:
       AVODfc="None"
   STRING=STRING+AVODfc+" "

   #4.FO OS
   regex=re.compile("4.FO(?s).*?OS:[;\. 0-9]*")
   AVfc=regex.search(pacientvalues[0])
   AVOSfc=re.sub("4.FO(?s).*?OS:[;\. 0-9]*?","",AVfc[0])
   regex=re.compile("[\+\-0-9]+")
   if regex.search(AVOSfc)==None:
       AVOSfc="None"
   STRING=STRING+AVOSfc+" "


################################################## NORMAL FROM HERE


   #remove space between a + - and a number    
   STRING=re.sub("\-( )+","-",STRING)
   STRING=re.sub("\+( )+ ","+",STRING)
   STRING=re.sub("(\-\+)","-+ ",STRING)
   STRING=re.sub("(\+\-)","+- ",STRING)

   #treatment
   regex = re.compile('TRATAMENT:(?s).*')
   treatment = regex.search(text)
   treatment = treatment[0].replace('TRATAMENT:',"")
   STRING=STRING+treatment
   STRING=STRING+DP
   regex=re.compile("( )+")
   STRING=STRING.replace('\n',' ').replace('\t', ' ').replace(';','')
   STRING=re.sub(regex," ",STRING)
   print (STRING)

f=open(input("file PATH: ") ,'r')
text=f.read()
valuesHextractor(text)  
f.close

我正在运行的其他代码并出现错误

f=open("filenames.txt")
for filename in f:
   file=open("C:/Users/User/Desktop/toate/"+filename)
   text=file.read()
   valuesHextractor(text)
   file.close()
f.close()
  • filenames.txt 包含存在于 文件夹。
  • 包含文件的文件夹路径为:C:/Users/User/Desktop/toate/

它成功地从 filenames.txt 中提取文件名并将其添加到路径中,但请注意,它最后添加了一个 \n,我不知道它来自哪里,用以下错误破坏我的代码:

== RESTART: C:/Users/User/AppData/Local/Programs/Python/Python37-32/go.py ==
Traceback (most recent call last):
  File "C:/Users/User/AppData/Local/Programs/Python/Python37-32/go.py", line 3, in <module>
    file=open("C:/Users/User/Desktop/toate/"+filename)
OSError: [Errno 22] Invalid argument: 'C:/Users/User/Desktop/toate/AANICAGHEORGHE.doc\n'
>>> 

我做错了什么?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:
    f=open("filenames.txt")
    for filename in f:
        filename = filename.strip("\n")
        file=open("C:/User/User/Desktop/toate/"+filename)
        text=file.read()
        valuesHextractor(text)
        file.close()
    f.close()
    

    您可以像这样轻松地将其剥离。或

    filenames = [i.strip("\n") for i in open("filenames.txt").readlines()]
    

    编辑:\n 是从您的 filenames.txt 文件结束的行。用于在计算机将文件存入存储器时标记行尾。

    Edit2:示例用法

    filenames = [i.strip("\n") for i in open("filenames.txt").readlines()]
    for filename in filenames:
        file=open("C:/User/User/Desktop/toate/"+filename)
        text=file.read()
        valuesHextractor(text)
        file.close()
    f.close()
    

    【讨论】:

    • 哦,对不起我之前的评论,只是现在更好地注意到了这个例子。现在就试试吧。
    • 是的,做到了。收到此错误:File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1070: character maps to &lt;undefined&gt;
    • 这是您代码其他部分的解码错误。这可能是由于使用了不同的编码格式。检查您的文本使用的编码类型。
    • 非常感谢您的回答。我打开的 .doc 是 Microsoft Word 97 - 2003 文档类型。有任何想法吗?现在寻找编码
    • 然后试试your_string.decode("mbcs")。根据this,ansi 是mbcs。除了“utf-8”之外,我对任何东西都不是很熟悉。或者我能想到的最简单的解决方案是将文件再次保存为 UTF-8
    猜你喜欢
    • 2021-02-10
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多