在Python中写入打开的文件时的分割函数[重复]

2024-01-26

所以我有一个程序,我应该在其中获取一个外部文件,用 python 打开它,然后分隔每个单词和每个标点符号,包括逗号、撇号和句号。然后我应该将该文件保存为文本中每个单词和标点符号出现时的整数位置。

例如:- 我喜欢编码,因为编码很有趣。计算机的骨架。

在我的程序中,我必须将其另存为:-

1,2,3,4,5,6,3,4,7,8,9,10,11,12,13,14

(不懂的请帮忙) 1-I、2-类似、3-到、4-代码、5-(,)、6-因为、7-是、8-乐趣 9-(.)、10-A、11-计算机、12-( '), 13-s, 14-骨架

所以这已经显示了每个单词的位置,即使重复,它也显示同一个单词的第一个出现的位置

抱歉这么长的解释,但这是我的实际问题。到目前为止我已经这样做了:-

    file = open('newfiles.txt', 'r')
    with open('newfiles.txt','r') as file:
        for line in file:
            for word in line.split():
                 print(word)  

这是结果:-

  They
  say
  it's
  a
  dog's
  life,.....

不幸的是,这种分割文件的方法不能将单词与标点符号分开,并且不能水平打印。 .split 不适用于文件,有谁知道我可以分割文件的更有效方法 - 来自标点符号的单词?然后将分开的单词和标点符号一起存储在一个列表中?


内置字符串方法.split只能使用简单的分隔符。没有争论,它只是分裂空白。对于更复杂的分割行为,最简单的方法是使用正则表达式:

>>> s = "I like to code, because to code is fun. A computer's skeleton."
>>> import re
>>> delim = re.compile(r"""\s|([,.;':"])""")
>>> tokens = filter(None, delim.split(s))
>>> idx = {}
>>> result = []
>>> i = 1
>>> for token in tokens:
...     if token in idx:
...         result.append(idx[token])
...     else:
...         result.append(i)
...         idx[token] = i
...         i += 1
...
>>> result
[1, 2, 3, 4, 5, 6, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 9]

另外,我认为您不需要根据您的规范逐行迭代文件。你应该这样做:

with open('my file.txt') as f:
    s = f.read()

这会将整个文件作为字符串放入s。注意,我没用过open之前with声明,没有任何意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中写入打开的文件时的分割函数[重复] 的相关文章

随机推荐