已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。
5天前关闭。
Improve this question
因此,我目前正在编写一个Python脚本,用于对研究项目的PDF中的一些数据进行排序,并将其输出为可以复制和粘贴到聚合中的字符串列表。我设法使它完成了输出所有条目的任务,从PDF复制和粘贴作为一个整洁的字符串列表,可以更容易地工作。这是完整的脚本:
from fileinput import close
import re
with open("C:\\Users\\buzzk\\Downloads\\New folder\\unsortedcats.txt") as input_file:
text = input_file.readlines()
matches = []
with open("C:\\Users\\buzzk\\Downloads\\New folder\\sortedcats.txt", mode="wt") as output:
for line in text:
match = re.findall('^([A\-][0-9]{8} [\/\|\s|\w|\]*)([a-z0-9].+)', line)
if match:
matches.append(match[0])
output.write(line + "\n")
id_number = re.compile('^([A\-][0-9]{8})')
intake_type = re.compile('( .....| ..... .........)$')
age_sex = re.compile('( [0-3]{1}m [0-9]+d [U|F|M|u|f|m]| [^y,m][0-9]+d [U|F|M|u|f|m])')
date = re.compile('( [0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4} )')
kittenstring = id_number.pattern + " " + age_sex.pattern + " " + date.pattern + " " + intake_type.pattern
if matches:
with open("C:\\Users\\buzzk\\Downloads\\New folder\\sortedcatstringlist.txt") as input_file2:
text2 = input_file2.readlines()
matches2 = []
with open("C:\\Users\\buzzk\\Downloads\\New folder\\kittens.txt", mode="wt") as output3:
for line in text2:
match2 = re.findall(kittenstring, line)
if match2:
matches2.append(match2[0])
output3.write(line + "\n")
if matches2:
print("Kitten sorting successful.")
else:
print("Failed.")
现在,我正在努力使它输出的数据条目内的参数,我需要为这个特定的项目。这是10年的摄入量数据,每一只猫被带到当地动物收容所超过10年的时间,我只寻找3个月以下的猫谁是流浪或业主投降。我还想在排序的条目中包括摄入日期和ID号。
为此,我创建了三个独立的正则表达式模式:
#( [0-3]{1}+m [0-9]+d [U|F|M|u|f|m]| [^y,m][0-9]+d [U|F|M|u|f|m]) Age and Sex
#( .....| ..... .........)$ Intake type
#( [0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4} ) Date of intake
#^([A\-][0-9]{8}) ID number
我希望代码从输入文本文件中读取字符串,如下所示:
A20543469 Goldie Cat Domestic Shorthair/Mix 10d F Black/Orange N 7/24/2013 10:14 AM Stray
A20543663 Snowflake Cat Siamese/Mix 4y 11m 28d F White/Grey U 7/24/2013 10:30 AM Stray
A20543901 kitten 1 Cat Domestic Longhair/Mix 1m 25d U Yellow U 7/24/2013 10:44 AM Stray
A20543914 kitten 3 Cat Domestic Longhair/Mix 1m 25d U Grey/Black U 7/24/2013 10:44 AM Stray
A20543990 kitten 2 Cat Domestic Longhair/Mix 1m 25d U Yellow U 7/24/2013 10:44 AM Stray
A20544282 Cat Domestic Shorthair/Mix M White/Grey N 7/24/2013 11:04 AM Stray
仅当字符串满足所有三个参数时才匹配字符串,并且仅将指定的模式作为字符串写入输出文本文件中,如下所示:
A20543901 1m 25d U 7/24/2013 Stray
但是,它并没有这样做。我对Python没有经验,这是我的第一个项目,所以我不完全知道我做错了什么。我主要是尝试重复我的脚本第一次对PDF进行排序时所做的事情,但这种方法不起作用。剧本的第一部分很好,但第二部分不行。
2条答案
按热度按时间nkcskrwz1#
问题一:
您的 kittenstring 模式不匹配提供的示例中的任何行,因为您希望匹配整行(在'^'和'$'之间),但要用单个空格(' ')连接部分模式,而部分模式之间还有其他字符。
试着调试你的整个模式。关于https://regex101.com/
最简单的解决方案是用'.*'连接部分模式,以匹配所需模式之间的任何字符串。
其他问题:
还要检查 age_sex 模式-在我看来,它错过了年龄的一部分,并且没有选择所需的线。我建议将文本转换为日期格式,然后过滤它。
为什么要将数据写入文件而不是直接使用它?你是否读取了正确的文件(sortedcatstringlist.txt来自哪里?))?
4ktjp1zp2#
让我们从这样一个前提开始,在这种情况下,过滤我们不想要的行比过滤我们想要的行更容易。
因此,使用一些控制台命令,我们可以得到一个“干净”的 Dataframe ,作为适合操作的文本文件。
现在我们有了一个干净的列表,这是python或SED可以接管并删除条目之间的单行不需要的数据的地方。
现在控制台中的字符串拆分确实需要一个批处理文件,我们可以根据需要输出解析后的数据。
这并不完美(我知道它会导致一些错误,因为字符检测不好)Python会更好,但它可以向您展示字符串处理的一个逻辑
parse.bat