由于我只需要txt文件中索引为0,-2 & -1的行,并且想优化代码的速度(我将要处理的文本文件在某个时候会变得很长),我想问一下是否有人知道是否可以避免加载整个文件而只加载所需的行。我遇到了下面的代码,我认为这将是这个问题的完美解决方案:
rows_wanted = [0,-2,-1]
data = pd.read_csv(txt_path, skiprows = lambda x: x not in rows_wanted)
字符串
不幸的是,这似乎不适用于负索引,因为输出仅包含第一行。因此,我想只计算对应于-2 & -的正指数值1通过获取文件中的行的总量,但我还没有找到一个解决方案,它本身并不需要加载整个文件。我也遇到了头和尾方法的Pandas,但至于我明白这些也只有在加载整个文件后才有用。
3条答案
按热度按时间dsf9zpds1#
我不认为
pd.rad_csv
有一个很好的方法来做你想做的事情,一个选择是使用how to efficiently get line count的答案,并在代码中使用它字符串
noj0wjuj2#
对于大文件,一种优化的方法是以 binary 模式打开文件,然后从
f.seek
结尾开始移动文件指针,检测2个换行符b'\n'
(表示各自的最后2行),并将这些行作为io.BinaryIO
读入一个字符串。样品:
字符串
monwx1rj3#
一种尊重文本编码和可能引用的换行符等的方法是使用
csv
和deque
来存储“最后n”行:字符串
范例:
型
然后又道:
型
限制:
rows
中混合了正索引和负索引,或者如果一些负索引引用了一些正索引之前的行。例如,上面的test.csv
:型
型