Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将固定长度字段从文件读入字典的更快方法_Python_File_Dictionary_Performance - Fatal编程技术网

Python将固定长度字段从文件读入字典的更快方法

Python将固定长度字段从文件读入字典的更快方法,python,file,dictionary,performance,Python,File,Dictionary,Performance,我有一个名称和地址文件,如下所示(示例行) 我想把它读入一本关于名字和价值的字典。这里self.field_list是文件中固定字段的名称、长度和起点的列表。有什么方法可以加速这种方法?(python 2.6) 与长度为的s说明符组合使用会比切片更快地撕裂字符串。与长度为的s说明符组合使用会比切片更快地撕裂字符串。如果您想加快速度,您还可以直接在self.field\u列表中存储字段开始+字段长度,而不是存储字段长度 另外,如果字段数据!=''可以更简单地写成if field_data(如果这样

我有一个名称和地址文件,如下所示(示例行)

我想把它读入一本关于名字和价值的字典。这里self.field_list是文件中固定字段的名称、长度和起点的列表。有什么方法可以加速这种方法?(python 2.6)


与长度为的
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