Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提示用户输入csv文件中的列名(不使用框架)_Python_List_Csv_Dictionary_For Loop - Fatal编程技术网

Python 提示用户输入csv文件中的列名(不使用框架)

Python 提示用户输入csv文件中的列名(不使用框架),python,list,csv,dictionary,for-loop,Python,List,Csv,Dictionary,For Loop,我试图从一个包含近4000行的csv文件中获取列名。大约有14列 我试图获取每一列并将其存储到列表中,然后提示用户自己输入至少5列他们想要查看的列 然后,用户应该能够键入他们希望看到的结果数量(它们应该是该列中最小的结果) 例如,如果他们选择服装品牌“8”,则会显示8个最便宜的品牌 到目前为止,我已经能够使用“with”并获得包含每个列的列表,但是我很难提示用户至少选择其中的5列。您可以很好地使用Python输入从用户获取输入,如果您想要提示次数,请使用for循环获取输入。检查以下代码: def

我试图从一个包含近4000行的csv文件中获取列名。大约有14列

我试图获取每一列并将其存储到列表中,然后提示用户自己输入至少5列他们想要查看的列

然后,用户应该能够键入他们希望看到的结果数量(它们应该是该列中最小的结果)

例如,如果他们选择服装品牌“8”,则会显示8个最便宜的品牌


到目前为止,我已经能够使用“with”并获得包含每个列的列表,但是我很难提示用户至少选择其中的5列。

您可以很好地使用Python输入从用户获取输入,如果您想要提示次数,请使用for循环获取输入。检查以下代码:

def get_user_val(no_of_entries = 5):
    print('Enter {} inputs'.format(str(no_of_entries)))
    val_list = []
    for i in range(no_of_entries):
            val_list.append(input('Enter Input {}:'.format(str(i+1))))
    return val_list

get_user_val()

我希望我没有误解你的意思,下面的代码就是你想要的

您可以将数据放入
目录
,然后对其进行排序

解决方案1
从io导入StringIO
从集合导入defaultdict
导入csv
随机输入
导入pprint
def random_price():
返回random.randint(11000)
def创建测试数据(n_行=4000,n_列=14,sep=','):
列=[chr(65+i)表示范围内的i(n列)]\A,B。。。
title=sep.join(列)
结果列表=[标题]
对于范围内的当前行(n行):
结果列表追加(sep.join([str(random_price())表示范围内的(n_col)])
返回'\n'。加入(结果列表)
def main():
如果“加载CSV”:
测试内容=创建测试数据(n\u行=10,n\u列=5)
dict_品牌=默认dict(列表)
将StringIO(测试内容)作为f:
rows=csv.reader(f,分隔符=',')
对于idx,枚举中的行(行):
如果idx==0:#标题
列=行
持续
对于i,枚举中的值(行):
dict_brand[第[i]列].追加(int(value))
pprint.pprint(dict_品牌,缩进=4,紧凑=True,宽度=120)
用户选择=输入(“输入列(品牌)”)
结果的数量=5个输入(“…”)
watch_columns=用户选择。拆分(“”)#D E F
对于“监视”列中的列名称:
cur_brand_list=dict_brand[col_name]
打印(已排序(当前品牌列表,反向=True)[:结果数量])
#打印(f'{col_name}:{sorted(cur_brand_list)}')#ASC
#打印(f'{col_name}:{sorted(cur_brand_list,reverse=True)}')#DESC
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
defaultdict(,
{'A':[9424635258545870912966487280830695088230],
‘B’:[1539155944618039854145409447512 74805289],
“C”:[770166861687313457236637607319254207640],
"D":[4313,3812,157,6674,8264,2636,765,2514,9833,1810],,
‘E’:[139446280058560571012255288696166024609])
输入列(品牌)C D
[9640, 7701, 6686, 6637, 6073]
[9833, 8264, 6674, 4313, 3812]

解决方案2:使用熊猫
为什么不是熊猫?我从来没有被教过熊猫框架。你不怕学它,而且学熊猫很容易而且值得。参赛作品的数量必须大于或等于5。如何将其与我的csv文件列列表连接?用户应该能够从要查看的数据和结果数中选择至少5列。通过编程,您必须为输入设置一些断点,即,
val>=5和val
def pandas_solution(test_content: str, watch_columns= ['C', 'D'], number_of_results=5):
    with StringIO(test_content) as f:
        df = pd.read_csv(StringIO(f.read()), usecols=watch_columns,
                         na_filter=False)  # it can add performance (ignore na)
    dict_result = defaultdict(list)
    for col_name in watch_columns:
        dict_result[col_name].extend(df[col_name].sort_values(ascending=False).head(number_of_results).to_list())

    df = pd.DataFrame.from_dict(dict_result)
    print(df)

      C     D
0  9640  9833
1  7701  8264
2  6686  6674
3  6637  4313
4  6073  3812