如何使 python 处理来自命令行的输入?
How to make python process inputs from command line?
我有一个 python 脚本,它最终会被转换成一个 .exe
文件。它应该工作的方式是用户将 excel 文件拖放到 python 文件上,这将 运行,并创建另一个输出 excel文件。
但是,它需要来自用户的 2 个输入:groups
和 size
。
当我放下 excel 文件时,命令提示符会自动打开,并提示我进行输入。但是,在提交值后,命令提示符会自动关闭,而不会执行脚本的其余部分。
如果我在不提示用户的情况下对 groups
和 size
的值进行硬编码,问题就会消失。
代码如下:
import pandas as pd
import sys
x = sys.argv[1]
file = pd.read_excel(x)
file = file.sample(frac=1).reset_index(drop=True)
file['Order'] = file.groupby('GENDER').cumcount()
file = file.sort_values(['Order', 'GENDER'], ascending=[True,False]).reset_index(drop=True)
groups = input ("Group number?")
size = input ("Group size?")
out = {}
count = 1
students = len(file)
std_sorted = 0
for i in range (0, len(file)-size, size):
if count != groups:
out["group"+str(count)] = file[i:(i+size)]
else:
out["group"+str(count)] = file[i:]
count += 1
std_sorted += size
if std_sorted != students:
out["group"+str(count)] = file[std_sorted:]
index = 0
writer = pd.ExcelWriter('output.xlsx')
for i in out:
out[i].pop("Order")
x = pd.DataFrame(out[i])
x.to_excel(writer, index = False, sheet_name="Sheet"+str(index))
workbook = writer.book # Access the workbook
worksheet= writer.sheets["Sheet"+str(index)] # Access the Worksheet
header_list = x.columns.values.tolist() # Generate list of headers
for i in range(0, len(header_list)):
worksheet.set_column(i, i, len(header_list[i])+2) # Set column widths based on len(header)
index += 1
writer.save()
我可以通过将您的代码复制粘贴到 Pycharm 来发现您的问题,甚至 运行 都没有(Pycharm 在代码检查方面做得很好)...
行:
for i in range (0, len(file)-size, size):
将始终引发 TypeError
异常。发生这种情况是因为 len(...)
是一个整数,但 size
是一个字符串,因为它是一个输入。您需要将输入更改为:
groups = int(input("Group number?"))
size = int(input("Group size?"))
尝试
groups = int(input ("Group number?"))
size = int(input ("Group size?"))
而不是
groups = input ("Group number?")
size = input ("Group size?")
我认为这是一个类型转换问题。尝试一下,也许它可以解决您的问题。
我有一个 python 脚本,它最终会被转换成一个 .exe
文件。它应该工作的方式是用户将 excel 文件拖放到 python 文件上,这将 运行,并创建另一个输出 excel文件。
但是,它需要来自用户的 2 个输入:groups
和 size
。
当我放下 excel 文件时,命令提示符会自动打开,并提示我进行输入。但是,在提交值后,命令提示符会自动关闭,而不会执行脚本的其余部分。
如果我在不提示用户的情况下对 groups
和 size
的值进行硬编码,问题就会消失。
代码如下:
import pandas as pd
import sys
x = sys.argv[1]
file = pd.read_excel(x)
file = file.sample(frac=1).reset_index(drop=True)
file['Order'] = file.groupby('GENDER').cumcount()
file = file.sort_values(['Order', 'GENDER'], ascending=[True,False]).reset_index(drop=True)
groups = input ("Group number?")
size = input ("Group size?")
out = {}
count = 1
students = len(file)
std_sorted = 0
for i in range (0, len(file)-size, size):
if count != groups:
out["group"+str(count)] = file[i:(i+size)]
else:
out["group"+str(count)] = file[i:]
count += 1
std_sorted += size
if std_sorted != students:
out["group"+str(count)] = file[std_sorted:]
index = 0
writer = pd.ExcelWriter('output.xlsx')
for i in out:
out[i].pop("Order")
x = pd.DataFrame(out[i])
x.to_excel(writer, index = False, sheet_name="Sheet"+str(index))
workbook = writer.book # Access the workbook
worksheet= writer.sheets["Sheet"+str(index)] # Access the Worksheet
header_list = x.columns.values.tolist() # Generate list of headers
for i in range(0, len(header_list)):
worksheet.set_column(i, i, len(header_list[i])+2) # Set column widths based on len(header)
index += 1
writer.save()
我可以通过将您的代码复制粘贴到 Pycharm 来发现您的问题,甚至 运行 都没有(Pycharm 在代码检查方面做得很好)...
行:
for i in range (0, len(file)-size, size):
将始终引发 TypeError
异常。发生这种情况是因为 len(...)
是一个整数,但 size
是一个字符串,因为它是一个输入。您需要将输入更改为:
groups = int(input("Group number?"))
size = int(input("Group size?"))
尝试
groups = int(input ("Group number?"))
size = int(input ("Group size?"))
而不是
groups = input ("Group number?")
size = input ("Group size?")
我认为这是一个类型转换问题。尝试一下,也许它可以解决您的问题。