所以我的数据看起来像这样:
onCreate()
我想将第7列7位数ID编号从最大到最小排序。另外,根据ID号中的第一个数字,我想将每一行发送到不同的文本文件(即对于所有以3开头的ID号,将整行发送到文本文件中,对于所有ID号,从1开始将整行发送到另一个文本文件......依此类推)。完成这样的事情的最简单方法是什么?
答案 0 :(得分:1)
您可以尝试使用pandas。这真的很容易。
import pandas as pd
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
txt = StringIO('''
a b c d e
1 3456542 5 may 2014
2 1245678 4 may 2014
3 4256876 2 may 2014
4 5643156 6 may 2014
''')
df = pd.read_csv(txt, delim_whitespace=True)
df.sort('b', ascending=False)
答案 1 :(得分:0)
假设您的输入数据是文本,我将首先将行彼此分隔,并将行内的行分开。请参阅str.split()
功能。
结果应该是列表清单。如果您提供关键字参数sort()
,则可以使用sorted()
或key=
函数按第二列排序。您可能必须将数字列转换为int,以便它们将从小到大排序(而不是按字母顺序排列)。
对于问题的最后一部分,您可以使用itertools.groupby()
为您提供所需的分组功能。
这应该让你开始。另一种选择是使用熊猫。
答案 2 :(得分:0)
&#34;我没有要求答案,我问的是从概念上开始。&#34;
使用file.readlines
开始阅读文本文件,使用line.strip().split(" ", 2)
分割数据,它将为您提供以下格式的数据:
['1', '3456542', ' 5 may 2014']
现在你应该能够完成你的任务了。
答案 3 :(得分:0)
继承我的方式:
import csv
from operator import itemgetter
#read in file
file_lines = []
with open("test.txt", "r") as csv_file:
reader = csv.reader(csv_file, delimiter=" ")
for row in reader:
file_lines.append(row)
#sort
file_lines.sort(key=itemgetter(1))
#write sorted file
with open("test_sorted.txt", "w") as csv_file:
writer = csv.writer(csv_file, delimiter=" ")
for row in file_lines:
writer.writerow(row)
#separate files
for row in file_lines:
file_num = row[1][0]
with open("file_{0}.txt".format(file_num), "w") as f:
writer = csv.writer(f, delimiter=" ")
writer.writerow(row)