我收到了一个从TSV/CSV文件收集数据的循环问题。 问题是我检查用户标识符是否在我的tsv文件中,以及是否只是进行常规打印。但事情是它不加起来。运行后停止TSV/CSV文件循环运行
让我用,我有现在直到代码解释一下:
import csv
with open("source/to/file.tsv") as tsvfile:
tsvreader = csv.reader(tsvfile, delimiter="\t")
for i in range(1,10):
for columns in tsvreader:
userid = 1
column1, column2, column3 = columns
if userid == int(column1):
print("userid:", userid,"result: ", int(column1), int(column2), int(column3))
userid += 1
每当我运行此代码将输出:
-- userid: 1 result: 1 3098 1
-- userid: 1 result: 1 508 1
-- userid: 1 result: 1 889 1
-- userid: 1 result: 1 802 0
-- userid: 1 result: 1 3800 0
这里的问题开始。因为我希望我的用户ID加到了价值1。我的用户ID将是2循环将再次启动,并打印出像:
-- user id 2 result: ...
-- user id 2 result: ...
-- user id 2 result: ...
但我的代码没有做到这一点。有人知道为什么
请注意:userid 2在我的TSV文件中,所以这不是问题!
额外的信息:在我的TSV文件我有以下情况:
1 802 0
1 3800 0
2 7492 1
2 5235 0
我要输出所有属于userid1(802,3800等)的结果,在那之后循环必须继续输出userid2的所有结果(7492,5235等)。在后面的过程中,我想为每个用户ID存储他们的结果。
太棒了!这正是我想要的,解释非常有帮助!非常感谢! – Rotan075
你也可以告诉我我应该如何输出每个user_id到一个单独的csv/tsv文件?或者那是不可能的@mhawke – Rotan075
当然,这是可能的。在遍历排序的数据时,会跟踪当前用户标识。打开一个CSV文件并开始向其写入每一行。当用户标识更改时打开一个新的CSV文件并写入该文件。使用带有用户ID的字典作为键可以帮助将列表中每个用户的数据分组。然后迭代将每个数据写入文件的字典的键。 Burhan Khalid的[答案](http:// stackoverflow。com/a/31538379/21945)使用defaultdict为每个用户分组数据 - 您可以将您的代码关闭。 – mhawke