Python将固定长度字段从文件读入字典的更快方法
我有一个名称和地址文件,如下所示(示例行) 我想把它读入一本关于名字和价值的字典。这里self.field_list是文件中固定字段的名称、长度和起点的列表。有什么方法可以加速这种方法?(python 2.6)Python将固定长度字段从文件读入字典的更快方法,python,file,dictionary,performance,Python,File,Dictionary,Performance,我有一个名称和地址文件,如下所示(示例行) 我想把它读入一本关于名字和价值的字典。这里self.field_list是文件中固定字段的名称、长度和起点的列表。有什么方法可以加速这种方法?(python 2.6) 与长度为的s说明符组合使用会比切片更快地撕裂字符串。与长度为的s说明符组合使用会比切片更快地撕裂字符串。如果您想加快速度,您还可以直接在self.field\u列表中存储字段开始+字段长度,而不是存储字段长度 另外,如果字段数据!=''可以更简单地写成if field_data(如果这样
与长度为的
s
说明符组合使用会比切片更快地撕裂字符串。与长度为的s
说明符组合使用会比切片更快地撕裂字符串。如果您想加快速度,您还可以直接在self.field\u列表中存储字段开始+字段长度,而不是存储字段长度
另外,如果字段数据!=''
可以更简单地写成if field_data
(如果这样可以提高速度,那么它是边际的)
我想说,与标准Python相比,您的方法速度非常快(即不使用非标准的专用模块)。如果您想提高速度,还可以直接在self.field\u列表中存储field\u start+field\u length
,而不是存储field\u length
另外,如果字段数据!=''
可以更简单地写成if field_data
(如果这样可以提高速度,那么它是边际的)
我想说,与标准Python相比,您的方法速度非常快(即,不使用非标准的专用模块)。如果您的行包含逗号(如示例所示),则可以使用line.split(“,”)而不是几个片段。这可能会更快。如果您的行中包含逗号(如示例所示),则可以使用line.split(“,”)而不是几个片段。这可能会更快。您需要使用该模块
它不仅可以处理csv,还可以处理任何类似于csv的格式。您需要使用该模块
它不仅可以处理csv,还可以处理任何类似csv的格式。编辑::刚才看到了您下面关于逗号的评论。下面的方法在读取文件时速度很快,但它是基于分隔符的,在您的情况下会失败。不过,它在其他情况下也很有用
如果您想快速读取文件,可以使用专用模块,例如几乎标准的:
loadtxt()
还允许您动态处理字段(使用converters
参数)。Numpy还允许您为列命名(请参见),以便执行以下操作:
data['name'][42] # Name # 42
得到的结构类似于Excel数组;与字典相比,它的内存效率相当高
如果你真的需要使用字典,你可以在Numpy快速读取的数据
数组上使用一个专用的循环,方式与你所做的类似。编辑:刚才看到了你下面关于逗号的评论。下面的方法在读取文件时速度很快,但它是基于分隔符的,在您的情况下会失败。不过,它在其他情况下也很有用
如果您想快速读取文件,可以使用专用模块,例如几乎标准的:
loadtxt()
还允许您动态处理字段(使用converters
参数)。Numpy还允许您为列命名(请参见),以便执行以下操作:
data['name'][42] # Name # 42
得到的结构类似于Excel数组;与字典相比,它的内存效率相当高
如果你真的需要使用字典,你可以在Numpy快速读取的数据
数组上使用一个专用循环,方法与你所做的类似。你不能像处理普通的csv文件一样处理它吗?可能在值上运行strip()。写这篇文章的时候,这些值是固定长度的,这有关系吗?我已经通读了给我改进的代码,似乎固定长度字段重叠了,例如(name:start:length)fname:1:10和fname\u initial:1:1,我很沮丧!你不能像处理普通的csv文件一样处理它吗?可能在值上运行strip()。写这篇文章的时候,这些值是固定长度的,这有关系吗?我已经通读了给我改进的代码,似乎固定长度字段重叠了,例如(name:start:length)fname:1:10和fname\u initial:1:1,我很沮丧!不幸的是,“类似CSV”可能还不够。字段可能包含嵌入的逗号,此时csv
和line.split(',')
将严重失败。不幸的是,“csv-like”可能不够。字段可能包含嵌入的逗号,此时csv
和line.split(“,”)
都将失败。已尝试此方法,但不确定如何处理重叠字段。。。重叠字段?谁想出了这个?试过了,但不知道如何处理重叠字段。。。重叠字段?谁想出了那个?
data = numpy.loadtxt('file_name.txt', dtype=('S10', 'S8'), delimiter=',') # dtype must be adapted to your column sizes
data['name'][42] # Name # 42