Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Csv - Fatal编程技术网

如何在用python创建的csv文件中按字母顺序对数据进行排序?

如何在用python创建的csv文件中按字母顺序对数据进行排序?,python,sorting,csv,Python,Sorting,Csv,在csv文件中输入用户名称及其测验分数。我想按字母顺序对用户名进行排序,但是我不知道怎么做。提前谢谢。下面是我的代码片段 userName=input('Please enter your full name: ').title() newrecord = "{user_name},{score_1},{score_2},{score_3}\n".format(user_name=userName, score_1=quiz_scores[0], score_2=quiz_scores[1],

在csv文件中输入用户名称及其测验分数。我想按字母顺序对用户名进行排序,但是我不知道怎么做。提前谢谢。下面是我的代码片段

userName=input('Please enter your full name: ').title()
newrecord = "{user_name},{score_1},{score_2},{score_3}\n".format(user_name=userName, score_1=quiz_scores[0], score_2=quiz_scores[1], score_3=quiz_scores[2])
classa = input("What class are you in? ")
if classa =='1':
    file=open('classroom1.csv', "a+")
    file.write(newrecord)
    file.close()
    with open('classroom1.csv') as csvfile:
        readCSV = csv.reader(csvfile)

我假设给定一个包含用户名和测验分数的csv文件,您希望读取该csv文件,然后根据用户名进行排序。您的问题(我相信)是,每次读取csv文件时,您都会得到一个表单列表
[用户名,score1,score2,score3]

如果是这样的话,为什么不将每个这样的列表存储在字典中,使用用户名作为键,然后对字典键进行排序

sorting_dict = {}
for curr_elem in readCSV:
   sorting_dict[curr_elem[0]] = curr_elem #Note this assumes no 2 users have the same name
sorted_names = sorted(sorting_dict.keys()) # actually sorted(sorting_dict) will also work and may be preferred, but '.keys()' makes it clearer for me
现在,您可以按排序顺序访问记录:

for curr_user in sorted_names:
   curr_record = sorting_dict[curr_user]
   #Do what you want from here...
====================================================

嗯。。。奇怪的是这对你不起作用。我制作了一个像你描述的虚拟文件,这似乎对我有用:

>>> f=open('csv.txt','r')
>>> readCSV = csv.reader(f)
>>> for curr_elem in readCSV:
...     sorting_dict[curr_elem[0]] = curr_elem
... 
>>> sorted_names = sorted(sorting_dict.keys())
>>> sorted_names
['art', 'bob', 'dick', 'harry', 'tom']
>>> for curr_user in sorted_names:
...     print sorting_dict[curr_user]
... 
['art', '77', '99', '98']
['bob', ' 88', '99', '78']
['dick', '77', '66', '99']
['harry', '90', '78', '98']
['tom', '33', '98', '67']
>>> 
我的csv.txt文件所在的位置:

bob, 88,99,78
art,77,99,98
tom,33,98,67
dick,77,66,99
harry,90,78,98

这里唯一的“问题”是您需要确保“harry”行不会以
\n
结尾,否则csv阅读器将读取一条空行,这将在排序dict[curr\u elem[0]=curr\u elem时抛出一个错误,但您可以很容易地防止它。

我假设给定一个包含用户名和测验分数的csv文件,您希望读取csv文件,然后根据用户名进行排序。您的问题(我相信)是,每次读取csv文件时,您都会得到一个表单列表
[用户名,score1,score2,score3]

如果是这样的话,为什么不将每个这样的列表存储在字典中,使用用户名作为键,然后对字典键进行排序

sorting_dict = {}
for curr_elem in readCSV:
   sorting_dict[curr_elem[0]] = curr_elem #Note this assumes no 2 users have the same name
sorted_names = sorted(sorting_dict.keys()) # actually sorted(sorting_dict) will also work and may be preferred, but '.keys()' makes it clearer for me
现在,您可以按排序顺序访问记录:

for curr_user in sorted_names:
   curr_record = sorting_dict[curr_user]
   #Do what you want from here...
====================================================

嗯。。。奇怪的是这对你不起作用。我制作了一个像你描述的虚拟文件,这似乎对我有用:

>>> f=open('csv.txt','r')
>>> readCSV = csv.reader(f)
>>> for curr_elem in readCSV:
...     sorting_dict[curr_elem[0]] = curr_elem
... 
>>> sorted_names = sorted(sorting_dict.keys())
>>> sorted_names
['art', 'bob', 'dick', 'harry', 'tom']
>>> for curr_user in sorted_names:
...     print sorting_dict[curr_user]
... 
['art', '77', '99', '98']
['bob', ' 88', '99', '78']
['dick', '77', '66', '99']
['harry', '90', '78', '98']
['tom', '33', '98', '67']
>>> 
我的csv.txt文件所在的位置:

bob, 88,99,78
art,77,99,98
tom,33,98,67
dick,77,66,99
harry,90,78,98

这里唯一的“问题”是您需要确保“harry”行不会以
\n
结尾,否则csv阅读器将读取一条空行,这将在排序dict[curr\u elem[0]=curr\u elem时抛出错误,但是可以很容易地防止这种情况。

考虑使用
列表。sort()
将csv数据添加到列表中,然后使用定义的函数对其进行排序。由于Python默认为嵌套列表中的第一个元素,因此此函数甚至可能是不必要的,因此可以省略
参数:

csvdata = []
with open('classroom1.csv') as csvfile:
        readCSV = csv.reader(csvfile)        
        for line in readCSV:
            csvdata.append(line)

for i in csvdata:
    print(i)
#['bravo', '93']
#['alpha', '86']
#['charlie', '67']
#['echo', '70']
#['delta', '75']

def getKey(item):
    return item[0]    

csvdata.sort(key=getKey)

for i in csvdata:
    print(i)
#['alpha', '86']
#['bravo', '93']
#['charlie', '67']
#['delta', '75']
#['echo', '70']

考虑使用
list.sort()
函数,将csv数据附加到列表中,然后使用定义的函数对其进行排序。由于Python默认为嵌套列表中的第一个元素,因此此函数甚至可能是不必要的,因此可以省略
参数:

csvdata = []
with open('classroom1.csv') as csvfile:
        readCSV = csv.reader(csvfile)        
        for line in readCSV:
            csvdata.append(line)

for i in csvdata:
    print(i)
#['bravo', '93']
#['alpha', '86']
#['charlie', '67']
#['echo', '70']
#['delta', '75']

def getKey(item):
    return item[0]    

csvdata.sort(key=getKey)

for i in csvdata:
    print(i)
#['alpha', '86']
#['bravo', '93']
#['charlie', '67']
#['delta', '75']
#['echo', '70']
为什么不用熊猫

df = pd.read_csv('classroom1.csv', sep = ',', names = ['user_name','score_1','score_2','score_3'])
df = df.sort('user_name')
df.to_csv('classroom1.csv', index = False, header = False)
那就应该注意了。

为什么不使用熊猫呢

df = pd.read_csv('classroom1.csv', sep = ',', names = ['user_name','score_1','score_2','score_3'])
df = df.sort('user_name')
df.to_csv('classroom1.csv', index = False, header = False)

这应该会解决问题。

对一个或多个用户的名称进行排序?对用户的名称进行排序,例如[Bob 24、James 26、Tom 19]等。
排序(csv.reader(csvfile))
映射(排序,csv.reader(csvfile))
,不确定您实际想要排序的内容,这个问题是否与@PadraicCunningham非常相似?当某人启动我的程序时,他们必须输入自己的姓名,然后他们进行测验,他们的分数和姓名被输入到csv文件中。我想按字母顺序对用户名进行排序。请不要故意破坏您的问题。对一个或多个用户名进行排序?对用户名进行排序,例如[Bob 24、James 26、Tom 19]等。
sorted(csv.reader(csvfile))
map(sorted,csv.reader(csvfile))
,不确定您实际想要排序的内容,这个问题是否与@PadraicCunningham非常相似?当某人启动我的程序时,他们必须输入自己的姓名,然后他们进行测验,他们的分数和姓名被输入到csv文件中。我想按字母顺序对用户的姓名进行排序。请不要故意破坏您的问题。我已经尝试了此代码,但没有打印任何内容。我使用了该代码,但在end@BobStanley-奇怪,这对你不起作用。我把我的答案扩大了一点,以说明它对我是如何起作用的。希望能有帮助。我已经尝试过这个代码,但是没有打印任何内容。我使用了该代码,但在end@BobStanley-奇怪,这对你不起作用。我把我的答案扩大了一点,以说明它对我是如何起作用的。希望有帮助。