我必须解析一个很大的文件,修改其内容,然后将其写入另一个文件。我现在拥有的文件与可能的文件相比并没有那么大,但是仍然很大。
文件大小为1.3 GB,包含大约700万行这种格式的文件:
8823192\t/home/pcastr/...
\t
是制表符。开头的数字是路径的明显大小。
我想要一个输出文件,其行如下所示(csv格式):
True,8823192,/home/pcastr/...
第一个值是路径是否为目录。
当前,我的代码如下所示:
with open(filepath, "r") as open_file:
while True:
line = open_file.readline()
if line == "": # Checks for the end of the file
break
size = line.split("\t")[0]
path = line.strip().split("\t")[1]
is_dir = os.path.isdir(path)
streamed_file.write(unicode("{isdir},{size},{path}\n".format(isdir=is_dir, size=size, path=path))
需要注意的是,这样的文件将变得非常大,所以我不仅需要快速的解决方案,而且还需要内存有效的解决方案。我知道通常在这两种品质之间进行权衡,
答案 0 :(得分:7)
最大的收益可能来自每行仅调用一次measure = CALCULATE(
AVERAGEX(
'stores',
'stores'[some_value]
),
FILTER(
ALL('stores'),
'stores'[store_child_and_parent] in VALUES('store_relationship'[store_parent])
)
)
split
您至少可以通过将输入文件视为迭代器并使用size, path = line.strip().split("\t")
# or ...split("\t", 3)[0:2] if there are extra fields to ignore
模块来简化代码。这也可能会提高您的速度,因为它不需要显式调用csv
:
split
答案 1 :(得分:0)
答案 2 :(得分:0)
在通过网络复制之前压缩文件可以加快数据处理速度,因为您可以更快地将数据保存到脚本中。
可以将输入文本文件压缩在远程目标系统上吗? 如果是,则可以使用python支持的算法(模块zlib,gzip,bz2,lzma,zipfile)将其压缩为一种格式
如果否,则至少可以在远程存储系统上运行脚本来压缩文件。 接下来,您将读取文件并使用python模块之一将其解压缩到内存中,然后处理每一行。