python中的文本文件排序

python中的文本文件排序,python,sorting,python-3.x,Python,Sorting,Python 3.x,我有文本文件customer.text Customer.text: 3|jack|USA 1|Maria|China 2|Kaishik|India 我想用第1列对这个表进行排序。排序之后,应该是这样的 1|Maria|China 2|Kaishik|India 3|jack|USA 我是python新手,我尝试了一些data.sort(data,key=lambda data:data[0])方法,但它对我不起作用。我真的很喜欢这个排序功能。您可以使用“pandas”包来完成这些任务 i

我有文本文件customer.text

Customer.text

3|jack|USA
1|Maria|China
2|Kaishik|India
我想用第1列对这个表进行排序。排序之后,应该是这样的

1|Maria|China
2|Kaishik|India
3|jack|USA

我是python新手,我尝试了一些
data.sort(data,key=lambda data:data[0])
方法,但它对我不起作用。我真的很喜欢这个排序功能。

您可以使用“pandas”包来完成这些任务

import pandas as pd
df = pd.read_csv('customer.txt',delimiter='|', header = None)
df.sort([0])

        0   1   2
   1    1   Maria   China
   2    2   Kaishik India
   0    3   jack    USA

您只需对列表进行排序:

file = open("Customer.text", "r")
lines = file.readlines()
lines.sort()
file.close()

请参见

排序
是一种列表方法,您不传入列表,而是调用列表上的方法

 with open("in.txt") as f:
    data = f.readlines()
    data.sort(key=lambda x: int(x.split("|")[0]))
    print(data)

['1|Maria|China\n', '2|Kaishik|India\n', '3|jack|USA\n']
key=lambda x:int(x.split(“|”)[0])
拆分
|
上的每一行,并基于第一个元素(即数字)进行排序

如果要将更新的值写入文件:

with open("in.txt","r+") as f:
    data = f.readlines()
    data.sort(key=lambda x: int(x.split("|")[0]))
    f.seek(0) # go back to start of the file
    for line in data:
        f.write(line) # write new data

假设
data
是一个列表列表,第一个“列”是作为
int
的数字,您的排序应该可以工作。但是,请注意,您混合了
sort
sorted
的语法

使用
排序
,您不需要将
数据
作为另一个参数传递;它作为
self
paremeter隐式传递。只需使用
data.sort(key=lambda d:d[0])
数据进行就地排序即可。如果要创建
数据的排序(浅层)副本,请使用
data2=sorted(data,key=lambda d:d[0])


在此之后,
数据
[[1',玛丽亚',[2',凯什克',[2',印度',[3',杰克',[USA']]

您如何读取文件?这里的
数据是什么?你能告诉我们怎么不适合你吗?请包括一个代码示例,以及您收到的任何(完整)错误消息,或者意外输出。请使用pandas软件包执行这些任务。-0。不是不正确,但似乎有点重。我想这取决于OPs的需要。
排序(数据,key=lambda d:d[0])
对两位数的ny不起作用numbers@PadraicCunningham你能详细说明一下吗?为什么它不能工作?对我来说很好。请注意,我将转换为
int
。正如tobias_k在他的答案sort()中所述,如果您将行拆分并将数字设为int,则此操作不起作用,因为例如
“10”
将在
“1”之前排序。
作为
ord(“0”)
KillianDS:是的,我刚刚意识到,请参见注释。投票支持托比亚斯·努克的回答
text = """3|jack|USA
1|Maria|China
2|Kaishik|India"""
data = [line.split("|") for line in text.splitlines()]
data = [[int(i), name, state] for i, name, state in data]
data.sort(key=lambda d: d[0])