在这里,我想创建一个简单的exe程序,使用pyinstaller删除重复的人。
因为我想获得多行输入,所以我使用了:
text = sys.stdin.readlines()
但是,即使它在Jupyter笔记本电脑或spyder上运行良好,但是当我创建并打开其exe文件后,它仅显示黑色窗口而没有显示任何内容。如果我删除该行,我知道它可以工作,但是仅允许单行输入。
另外,我尝试切换这两个,所以先输入,然后输入sys.stdin.readlines():
text = sys.stdin.readlines()
text = input('Type or Paste your text, and press Ctrl + Z.\n\n')
但是,即使允许多行输入,它也只在输入的第一行处理复制功能。
这是我的完整代码。请帮帮我。谢谢
# -*- coding: utf-8 -*-
import re
import sys
def duplication():
text = sys.stdin.readlines()
text = input('Type or Paste your text, and press Ctrl + Z.\n\n')
text = re.split(", |-| |,", text)
text = list(filter(None, text)) # fastest
names = set()
remove = set()
for n in text:
if not n.startswith(("*", "-")):
n = n.lstrip()
if n in names:
remove.add(n)
elif n not in names:
names.add(n)
print(f'\n\nDuplicated person: {(sorted(remove))}\n\nTotal of {len(remove)}is/are removed, Total of {len(names)}is shown.')
print (sorted(names))
def next_move():
nxt = input("\n\nWhat do you want to do next?\n 1. Enter another text\n 2. exit\n\n")
if nxt == '1':
duplication()
next_move()
elif nxt == '2':
exit()
else:
print('Please choose between 1 and 2.')
next_move()
def overall():
duplication()
next_move()
overall()
答案 0 :(得分:0)
您的输入处理有点麻烦,并且您似乎也没有意识到readlines()
方法会返回所有行的列表,直到文件末尾。
因此,input
调用将看不到任何输入-这可能使其挂起。
由于您不讨论数据格式,所以我假设
'#'
和'-'
开头的行应被忽略,空行也应被忽略您的duplication
函数应看起来像这样(未经测试):
def duplication():
print('Type or Paste your text, and press Ctrl + Z.\n\n')
text = sys.stdin.readlines()
names = set()
remove = set()
for n in text:
n = n.strip()
if n and n.startswith(("*", "-")):
continue # straight to next line
if n in names:
remove.add(n)
elif n not in names: # else: would be just as good!
names.add(n)
print(f'\n\nDuplicated person: {(sorted(remove))}\n\nTotal of {len(remove)}is/are removed, Total of {len(names)}is shown.')
print (sorted(names))