我有一个名为“ MyTextFile.txt”的文本文件。我要删除所有字母,并在每个单词的第一个字母之外放置破折号,还要保留标点符号。
假设文本文件“ MyTextFile.txt”包含以下字符串:
男孩去了学校,然后吃了早餐! 哇,那不是一个好故事!?
所需的结果是这样的:
T-- b-- w-- t- t-- s -----,t-- a-- h-- b -------! W--,t ---的n-- a n --- s ----! ?
这是我的工作,这几乎不错,但并不完美!
import nltk
file_content = open("MyTextFile.txt", encoding='utf8').read()
tokens = nltk.word_tokenize(file_content)
print(tokens)
first_letter = [i[0] for i in tokens]
new_words = ' '.join(first_letter).strip()
print(new_words)
appendFile = open('results_file.txt', 'w', encoding='utf8')
appendFile.write(new_words)
我的输出是这样:
T b w t t s,t a h b! ,, n! ?
答案 0 :(得分:4)
这种操作最好用正则表达式完成:
import re
txt = "This is a test!"
dashed = re.sub(r"([A-Za-z])([A-Za-z]+)", lambda m: m[1] + "-"*len(m[2]), txt)
print (dashed)
将会输出:T--- i- a t---!
并将其应用于文件:
with open("input_file.txt", 'r') as i:
with open("output_file.txt", 'w') as o:
for txt in i:
dashed = re.sub(r"([A-Za-z])([A-Za-z]+)", lambda m: m[1] + "-"*len(m[2]), txt)
o.write(dashed + '\n')
答案 1 :(得分:1)
实际上,@ Uri的答案比我的要好。反正就在这里:)
import nltk
file_content = "The boy went to the school, then ate his breakfast! Wow, that’s not a nice story!?"
tokens = nltk.word_tokenize(file_content)
print(tokens)
new_words = []
for token in tokens:
token = token.strip()
if token.isalpha():
new_word = token[0]
new_word += "-"*(len(token)-1)
else:
new_word = token
new_words.append(new_word)
new_words = ' '.join(new_words)
print(new_words)
# T-- b-- w--- t- t-- s----- , t--- a-- h-- b-------- ! W-- , t--- ’ s n-- a n--- s---- ! ?
答案 2 :(得分:1)
请注意,您需要知道以前的字符才能执行此任务-zip
将很有帮助:
txt = "The boy went to the school, then ate his breakfast! Wow, that’s not a nice story!?"
new_txt = txt[0] + ''.join('-' if curr.isalpha() and prev.isalpha() else curr for prev, curr in zip(txt,txt[1:]))
print(new_txt)
输出:
T-- b-- w--- t- t-- s-----, t--- a-- h-- b--------! W--, t---- n-- a n--- s----!?
说明:我将txt
和txt[1:]
从第二个字符开始以txt开头,然后使用zip
创建一个包含两个字符的每个元素的单个可迭代对象:prev
即上一页和curr
即当前字符,如果两个字母都是我创建的-
字符,否则为当前字符,则我将我创建的所有字符都加入并在开始时添加第一个字符(txt[0]
) ,因为它没有上一个。
我认为正则表达式更适合此任务,但是给出以上示例,我想表明使用python
语言,您可以编写简洁的代码而无需使用正则表达式。
答案 3 :(得分:0)
使用简单的python逻辑::
def keepPunc(x):
temp = x[0]
for i in range(1,len(x)):
if x[i].isalpha():
temp=temp+"-"
else:
temp=temp+x[i]
return temp
def func(a):
temp = a.split()
final = [i[0]+"-"*(len(i)-1) if i.isalpha() else keepPunc(i)for i in temp]
print(a)
print(' '.join(final))
a = "The boy went to the school, then ate his breakfast! Wow, that’s not a nice story!?"
func(a)
输出::
这个男孩去了学校,然后吃了早餐!哇,那不是一个好故事!?
T-- b-- w --- t- t-- s -----,t --- a-- h-- b --------! W--,t ---’- n-- n ---- s ---- !?