我有一个非常简单的问题:使用Python从txt文件中读取不同条目的最有效方法是什么?
假设我有一个文本文件,如:
42017 360940084.621356 21.00 09/06/2015 13:08:04
42017 360941465.680841 29.00 09/06/2015 13:31:05
42017 360948446.517761 16.00 09/06/2015 15:27:26
42049 361133954.539315 31.00 11/06/2015 18:59:14
42062 361208584.222483 10.00 12/06/2015 15:43:04
42068 361256740.238150 19.00 13/06/2015 05:05:40
在C中我会这样做:
while(fscanf(file_name, "%d %lf %f %d/%d/%d %d:%d:%d", &id, &t0, &score, &day, &month, &year, &hour, &minute, &second) != EOF){...some instruction...}
在Python中做这样的事情的最佳方法是什么?为了将每个值存储到一个不同的变量中(因为我必须在整个代码中使用这些变量)。
提前致谢!
答案 0 :(得分:2)
我觉得泥鱼回答很好,这是另一种方式(可能更轻一点)
import time
with open(file) as f:
for line in f:
identifier, t0, score, date, hour = line.split()
# You can also get a time_struct from the time
timer = time.strptime(date + hour, "%d/%m/%Y%H:%M:%S")
答案 1 :(得分:0)
我会查找string.split()方法
例如,您可以使用
for line in file.readlines():
data = dict(zip(("id", "t0", "score", "date", "time"), line.split(" ")))
instructions()
答案 2 :(得分:0)
根据您对数据的处理方式,pandas可能需要考虑:
import pandas as pd
with open(file_name) as infile:
df = pd.read_fwf(infile, header=None, parse_dates=[[3, 4]],
date_parser=lambda x: pd.to_datetime(x, format='%d/%m/%Y %H:%M:%S'))
双列表[[3, 4]]
与date_parser
参数一起将第三个和第四个(0索引)列读作单个数据时对象。然后,您可以使用
>>> df['3_4'].dt.hour
0 13
1 13
2 15
3 18
4 15
5 5
dtype: int64
(如果您不喜欢' 3_4'键,请使用上面的parse_dates
参数,如下所示:
parse_dates={'timestamp': [3, 4]}
)
read_fwf
用于读取您的数据似乎遵守的固定宽度列。或者,有read_csv
,read_table
和lot more等功能。
(这个答案几乎与this SO answer重复,但由于这里的问题比较一般,我将此作为另一个答案,而不是评论。)