以某种方式将CR/LF字符编码为CSV文件是否可能/合法?
(作为CSV标准的一部分?)
如果是这样我应该如何编码CR/LF?
我有这个非常大的CSV文件(15 Gb),我需要读取大约100万条随机行.据我所知 - 并实现 - Python中的CSV实用程序只允许在文件中按顺序迭代.
将所有文件读入内存以使用一些随机选择是非常耗费内存的,并且通过所有文件并丢弃一些值并选择其他文件非常耗时,因此,无论如何都要从CSV文件中选择一些随机行并且只读那行?
我尝试没有成功:
import csv
with open('linear_e_LAN2A_F_0_435keV.csv') as file:
reader = csv.reader(file)
print reader[someRandomInteger]
Run Code Online (Sandbox Code Playgroud)
CSV文件的示例:
331.093,329.735
251.188,249.994
374.468,373.782
295.643,295.159
83.9058,0
380.709,116.221
352.238,351.891
183.809,182.615
257.277,201.302
61.4598,40.7106
Run Code Online (Sandbox Code Playgroud) 是否可以从HDF5中读取行的随机子集(通过pyTables,或者最好是pandas)?我有一个非常大的数据集,有数百万行,但只需要几千个样本进行分析.从压缩的HDF文件中读取怎么样?
我有一个很长的python生成器,我想通过随机选择一个值的子集来"稀释".不幸的是,random.sample()不能使用任意迭代.显然,它需要支持len()操作的东西(可能是对序列的非顺序访问,但这一点并不清楚).而且我不想建立一个庞大的列表,所以我可以把它简化.
事实上,有可能在一次通过中均匀地从序列中采样,而不知道它的长度 - 这就是一个很好的算法Programming perl(编辑:"水库采样",谢谢@ user2357112!).但有没有人知道提供此功能的标准python模块?
演示问题(Python 3)
>>> import itertools, random
>>> random.sample(iter("abcd"), 2)
...
TypeError: Population must be a sequence or set. For dicts, use list(d).
Run Code Online (Sandbox Code Playgroud)
在Python 2上,错误更透明:
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
random.sample(iter("abcd"), 2)
File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/random.py", line 321, in sample
n = len(population)
TypeError: object of type 'iterator' has no len()
Run Code Online (Sandbox Code Playgroud)
如果没有别的选择random.sample(),我会试着把发电机包装成一个提供__len__方法的对象(我可以事先找出它的长度).所以我会接受一个答案,说明如何干净利落地做到这一点.