如何在Python创建的csv文件中按字母顺序排序数据?

2024-10-01 00:32:12 发布

您现在位置:Python中文网/ 问答频道 /正文

用户的名字和他们在测验中的分数被输入到一个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)

Tags: csv用户nameinputusernameopen名字quiz
3条回答

为什么不用熊猫呢?在

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)

应该会处理好的。在

我假设给定一个包含用户名和测验分数的csv文件,您希望读取csv文件,然后根据用户名进行排序。您的问题(我相信)是每次从csv文件中读取时,都会得到一个表单[user_name, 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

现在,您可以按排序顺序访问记录:

^{pr2}$

=======================================================

嗯,嗯。。。很奇怪这对你没用。我做了一个像你描述的虚拟文件,这是对我有用的:

>>> 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阅读器将读取一个空行,它将在sorting_dict[curr_elem[0]] = curr_elem处抛出一个错误,但是你可以很容易地防范这一点。在

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

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']

相关问题 更多 >