我有一个完整的CSV文件包含这样的内容:
L4,B4
B3,C3,B2
B2,A1,C9,F3
F1,E1
F3,E4,I9,A2,F1
K4
我想得到的是:
B4,L4
B2,B3,C3
A1,B2,C9,F3
E1,F1
A2,E4,F1,F3,I9
K4
因此,目标是以一种以数字方式对其进行排序 - 对于一行中的所有元素。每行的条目数不一致!
我已经尝试使用libreoffice进行排序(使用从左到右的排序),但我无法使其工作。还看了python来完成这项工作,但没有成功。
任何想法如何将这些东西排序 - 最好是使用Python?
感谢您的帮助! 谢谢!
答案 0 :(得分:1)
for line in file.read().split('\n'):
l = line.split(',')
l.sort()
然后将其写入另一个文件,或者无论如何都要使用它。
答案 1 :(得分:1)
with open('file.txt') as f:
for line in f:
print ",".join(sorted(line.rstrip().split(',')))
<强>输出强>
B4,L4
B2,B3,C3
A1,B2,C9,F3
E1,F1
A2,E4,F1,F3,I9
K4
答案 2 :(得分:0)
试试这个
file_name = open('i_c.csv','rb')
for line in file_name:
if line != '\n':
print ",".join(sorted(line.strip().split(',')))
答案 3 :(得分:0)
@Ashoka Lella提供的答案很好,但还不完整。
假设我们提供了相同的文件样本,但稍有改动:
L4,B4
B3,C3,B2
B2,A1,C9,F3,A10,A2
F1,E1
F3,E4,I9,A2,F1
K4
为了清楚起见:文件是相同的,除了第三行B2,A1,C9,F3,A10,A2
,我添加了A10
和A2
。现在,如果按照上面接受的答案运行它,第三行的结果将是:
A1,A10,A2,B2,C9,F3
这不是人类如何对列表进行排序(A2
应该在A10
之前,因为2&lt; 10)。也就是说,当你按字符串排序时 - 这就是它的完成方式:一次排序每个下一个字符,这将导致A10在A2之前。这就是您需要alphanum sorting algorithm及其implementation in Python的原因。因此,在排序中实现alphanum键选项后,排序将以人类期望的方式执行。有了这个,而不是像这样的结果(当你看它时,它不是真正的排序):
A1,A10,A2,B2,C9,F3
你会得到一个更好的答案:
A1,A2,A10,B2,C9,F3
这是Ashoka代码的增强版:
import re
convert = lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
with open('file.txt') as f:
for line in f:
print ",".join(sorted(line.rstrip().split(','), key = alphanum_key))