将平面文件读取为转置,python

将平面文件读取为转置,python,python,flat-file,transpose,Python,Flat File,Transpose,我对以尽可能高效的方式阅读Python中的固定宽度文本文件感兴趣。具体来说,大多数时候我对平面文件中的一列或多列感兴趣,但对整个记录不感兴趣 在我看来,一次只读取一行文件,并在将整行内容读入内存后提取所需的列是低效的。我想我宁愿选择只阅读所需的列,从上到下,从左到右(而不是从左到右,从上到下) 这样的事情是可取的吗?如果是,可能吗?线条有多大?除非每一条记录都是巨大的,否则仅仅阅读你感兴趣的领域而不是整行内容可能不会有什么不同 对于具有固定格式的大文件,您可能会从文件中获得一些信息。我只使用C语

我对以尽可能高效的方式阅读Python中的固定宽度文本文件感兴趣。具体来说,大多数时候我对平面文件中的一列或多列感兴趣,但对整个记录不感兴趣

在我看来,一次只读取一行文件,并在将整行内容读入内存后提取所需的列是低效的。我想我宁愿选择只阅读所需的列,从上到下,从左到右(而不是从左到右,从上到下)


这样的事情是可取的吗?如果是,可能吗?

线条有多大?除非每一条记录都是巨大的,否则仅仅阅读你感兴趣的领域而不是整行内容可能不会有什么不同


对于具有固定格式的大文件,您可能会从文件中获得一些信息。我只使用C语言而不是Python来实现这一点,但是映射文件然后直接访问相应的字段似乎是相当有效的。

平面文件不适合您尝试的操作。我的建议是将文件转换为SQL数据库(使用sqlite3),然后只读取所需的列。SQLite3的速度非常快。

如果它的宽度确实是固定的,那么您应该能够调用read(N)跳过固定数量的字节,从一行的列末尾跳到下一行的列开头。

文件以(一维)位序列的形式排列。”“台词”只是为了方便人们阅读而增加的一种便利。所以,一般来说,您所要求的在普通文件上是不可能的。要实现这一点,您需要找到记录的起始位置。最常见的两种方式是:

  • 搜索换行符(换句话说,读取整个文件)
  • 使用特殊间隔的布局,以便每个记录都使用固定的布局。这样,您就可以使用低级文件操作,如
    seek
    ,直接转到需要转到的位置。这样可以避免读取整个文件,但手动执行会很痛苦
我不会太担心文件读取性能,除非它成为一个问题。是的,您可以对文件进行内存映射,但您的操作系统可能已经为您缓存了。是的,您可以使用数据库格式(例如,sqlite3文件格式),但可能不值得这么麻烦


关于“固定宽度”的旁注:你这到底是什么意思?如果您真正的意思是“每一列相对于记录的开始总是以相同的偏移量开始”,那么您肯定可以使用跳过您不感兴趣的过去的数据

我同意。平面文件从来都不是理想的。我正在尝试使用人口普查和其他数据源提供的平面文件。我试图避免不必要的读取操作。将整个文件放入sql是可能的,但考虑到文件的大小,这并不理想。最好只将文件的一个子集转换为sql。