python中的文本文件排序
我有文本文件customer.textpython中的文本文件排序,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
:
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])