鱼C论坛

 找回密码
 立即注册
查看: 1223|回复: 12

[已解决]字符串中 提取小于5个带有空格的一行数据 求助

[复制链接]
发表于 2021-12-3 08:31:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我有多行数据,实例如下(每一个词用一个空格隔开,以一个句号结尾):

A& # B B B .
C& # N N MM .
EE # LLLL .

我像提取有&字符的词”#“后空格小于5的一行数据;具体提取的结果是:

A& # B B B .
C& # N N MM .

我目前的代码:

import re
a = open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8")
dict = a.readlines()
list1=[]
for i in dict:
       if " " in i.split('#')[-1]:
              i.count(" ")
       if "&" in i.split('#')[0] and i.count(" ")<4 in i.split('#')[-1]:
              print(i)

还是缺点什么,希望帮帮我 补全,谢谢噢。
最佳答案
2021-12-3 09:36:26
with open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8") as f:
    s = f.read()
result = []
for line in s.split('\n'):
    if '&' in line:
        lh, lb = line.split('#')
        if lb.count(' ') < 5:
            result.append(line)
print(result)
import re   # 没有使用到,删除
a = open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8")   # 文件没有主动关闭,可使用with打开,让系统关闭
dict = a.readlines()
list1=[]
for i in dict:
       if " " in i.split('#')[-1]:  # 没有意义
              i.count(" ")  # 计算了数目,但没有赋值给变量,这两行没有意义。而且下一句又计算了一次。
       if "&" in i.split('#')[0] and i.count(" ")<4 in i.split('#')[-1]:  # 如果变量已经固定,后续有多次调用,应避免再次index索引
              print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-3 09:36:26 | 显示全部楼层    本楼为最佳答案   
with open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8") as f:
    s = f.read()
result = []
for line in s.split('\n'):
    if '&' in line:
        lh, lb = line.split('#')
        if lb.count(' ') < 5:
            result.append(line)
print(result)
import re   # 没有使用到,删除
a = open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8")   # 文件没有主动关闭,可使用with打开,让系统关闭
dict = a.readlines()
list1=[]
for i in dict:
       if " " in i.split('#')[-1]:  # 没有意义
              i.count(" ")  # 计算了数目,但没有赋值给变量,这两行没有意义。而且下一句又计算了一次。
       if "&" in i.split('#')[0] and i.count(" ")<4 in i.split('#')[-1]:  # 如果变量已经固定,后续有多次调用,应避免再次index索引
              print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-3 09:57:43 | 显示全部楼层

学到了,谢谢您的帮助,目前出现了一个问题,我把代码用到另一个文件上 有如下报错,希望您看看 谢谢:
Traceback (most recent call last):
  File "C:\Users\amgalang\Desktop\第二章\提取小于5个空格符的数据.py", line 6, in <module>
    lh, lb = line.split('#')
ValueError: not enough values to unpack (expected 2, got 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-3 10:05:19 | 显示全部楼层
Amgalang 发表于 2021-12-3 09:57
学到了,谢谢您的帮助,目前出现了一个问题,我把代码用到另一个文件上 有如下报错,希望您看看 谢谢:
...

txt有没有带#的空行吧,把txt发上来看看。
我这代码假定你的txt是没有垃圾数据的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-3 10:11:16 | 显示全部楼层
suchocolate 发表于 2021-12-3 10:05
txt有没有带#的空行吧,把txt发上来看看。
我这代码假定你的txt是没有垃圾数据的。

数据有点大,发不上去,那我找找看 空行 谢谢哒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-3 10:13:48 | 显示全部楼层
Amgalang 发表于 2021-12-3 10:11
数据有点大,发不上去,那我找找看 空行 谢谢哒

传网盘分享链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-3 10:26:11 | 显示全部楼层
Amgalang 发表于 2021-12-3 09:57
学到了,谢谢您的帮助,目前出现了一个问题,我把代码用到另一个文件上 有如下报错,希望您看看 谢谢:
...
with open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8") as f:
    s = f.read()
result = []

for line in s.split('\n'):
    try:
        if '&' in line:
            lh, lb = line.split('#')
            if lb.count(' ') < 5:
                result.append(line)
    except Exception as e:
        print(e)
        continue
print(result)

加个异常处理机制就好了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-3 10:26:19 | 显示全部楼层

好的,我把 指代有“#”符号的筛选出来,在其上 跑了下代码,然后:
Traceback (most recent call last):
  File "C:\Users\amgalang\Desktop\第二章\提取小于5个空格符的数据.py", line 6, in <module>
    lh, lb = line.split('#')
ValueError: too many values to unpack (expected 2)

我的文件链接(是小语种的文件):
链接:https://pan.baidu.com/s/1WlWtPNzvS-hgYH5s4B0bcw
提取码:9999
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-3 10:37:25 | 显示全部楼层
本帖最后由 Stubborn 于 2021-12-3 11:01 编辑

至于你后面要提取空格少于5的话,符合条件的都晒选出来了,遍历一次,用分割函数,得到前后两段数据,在用count函数统计后段的空格数量即可
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
txt = open(path).read()
res = re.findall(".*?&.*?#.*?\.", txt)
result = []
for each in res:
    a, b = each.split('#')
    if b.count(" ") < 5:
        result.append(each)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-3 11:43:42 | 显示全部楼层
Amgalang 发表于 2021-12-3 10:26
好的,我把 指代有“#”符号的筛选出来,在其上 跑了下代码,然后:
Traceback (most recent call last) ...

看了下原始文档,有的行确实没有#,而有的行有多个#。
稍稍改下即可。
with open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8") as f:
    s = f.read()
result = []
for line in s.split('\n'):
    if '&' in line and '#' in line:
        lh, lb = line.split('#', 1)
        if lb.count(' ') < 5:
            result.append(line)
print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-4 00:09:23 | 显示全部楼层
z5560636 发表于 2021-12-3 10:26
加个异常处理机制就好了.

感谢您的帮助,代码学到了,good night~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-4 00:09:53 | 显示全部楼层
suchocolate 发表于 2021-12-3 11:43
看了下原始文档,有的行确实没有#,而有的行有多个#。
稍稍改下即可。

好的,谢谢哒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-4 00:11:22 | 显示全部楼层
Stubborn 发表于 2021-12-3 10:37
至于你后面要提取空格少于5的话,符合条件的都晒选出来了,遍历一次,用分割函数,得到前后两段数据,在用c ...

感谢您的帮助,正在学习代码,谢谢哒 good night~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-12 00:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表