爲了得到對在子列表map
str.split
對文件對象和調用排序:
with open("in.txt") as f:
print(sorted(map(str.split,f)))
in.txt:
e 6
c 5
f 2
a 4
輸出:
[['a', '4'], ['c', '5'], ['e', '6'], ['f', '2']]
排序文件按字母順序剛開您只需調用該文件對象的排序行:
with open("test.txt") as f:
print(sorted(f))
如果要格式化輸出:
with open("test.txt") as f:
for sub in sorted(map(str.split,f)):
print("letter = {}, num = {}".format(*sub))
letter = a, num = 4
letter = c, num = 5
letter = e, num = 6
letter = f, num = 2
也是爲什麼你看到['2', '4', '5', '6', 'a', 'c', 'e', 'f']
是因爲調用各執.read所有的數據分割成一個單一的列表,拆分,拆分任何空格,當字典順序比較字符串的數字字母數字被認爲是較低的SO 2 <一,請注意,在比較字符串數字時,如果字符串被比較爲11 > 100 = True
作爲字符串被比較爲1
被認爲大於0
當比較數字與int
比較時,100會出現在排序列表中的11
之前。
如果你想擁有的每個用戶始終保持最近三年得分最高,你可以使用一個deque
以3 maxlen
和初始排序pickle
了字典之後。
from csv import reader
from collections import deque, OrderedDict
import pickle
name, new_score = "foo",100
with open("test.txt") as f:
d = OrderedDict((name, deque(map(int,rest),maxlen=3)) for name, *rest in reader(sorted(f)))
print(d)
d[name].append(new_score)
print(d)
with open("my_data.pkl","wb") as out:
pickle.dump(d, out)
with open("my_data.pkl","rb") as out:
print(pickle.load(out))
的test.txt:
homer,2
foo,1,2,3
bar,4,5,6
輸出:
OrderedDict([('bar', deque([4, 5, 6], maxlen=3)), ('foo', deque([1, 2, 3], maxlen=3)), ('homer', deque([2], maxlen=3))])
OrderedDict([('bar', deque([4, 5, 6], maxlen=3)), ('foo', deque([2, 3, 100], maxlen=3)), ('homer', deque([2], maxlen=3))])
OrderedDict([('bar', deque([4, 5, 6], maxlen=3)), ('foo', deque([2, 3, 100], maxlen=3)), ('homer', deque([2], maxlen=3))])
一旦整理你只需要加載得到快譯通,你已經寫了後傾。
我的代碼的頂部有點搞砸了,我是這個websire的新手。 –
我假設你的意思是'排成行:print(row)'not'print(line)';答案中解決了其他問題。 – ShadowRanger