Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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脚本(csv文件)_Python_Csv_Dictionary_Split_Strip - Fatal编程技术网

运行速度非常慢的简单python脚本(csv文件)

运行速度非常慢的简单python脚本(csv文件),python,csv,dictionary,split,strip,Python,Csv,Dictionary,Split,Strip,我正在运行一个脚本,将一些标题列恢复到CSV文件。它将具有头列的原始文件作为字典,并将它们重新缝合到丢失头列的文件中 问题是它的速度太慢了。这些文件都是中等大小的~50mb,有200000行96列。目前,当我预览输出文件时,它看起来是正确的。每10分钟增加约200kb的大小 我是一个绝对不会编码的人,所以如果能帮我弄清楚为什么脚本这么慢,我将不胜感激 hapinfile = file('file_with_header_columns', 'r') hapoutfile = file('file

我正在运行一个脚本,将一些标题列恢复到CSV文件。它将具有头列的原始文件作为字典,并将它们重新缝合到丢失头列的文件中

问题是它的速度太慢了。这些文件都是中等大小的~50mb,有200000行96列。目前,当我预览输出文件时,它看起来是正确的。每10分钟增加约200kb的大小

我是一个绝对不会编码的人,所以如果能帮我弄清楚为什么脚本这么慢,我将不胜感激

hapinfile = file('file_with_header_columns', 'r')
hapoutfile = file('file_missing_header_columns.csv', 'r')
o = file('filescombined.txt', 'w')

dictoutfile={}

for line in hapoutfile:
    a=line.rstrip('\n').rstrip('\r').split('\t')
    dictoutfile[a[0]]=a[1:]

hapinfile.close()

for line in hapinfile:
    q=line.rstrip('\n').rstrip('\r').split('\t')
    g=q[0:11]
    for key, value in dictoutfile.items():
        if g[0] == key:
            g.extend(value)
            o.write(str('\t'.join(g)+'\n'))


hapoutfile.close()
o.close()

首先,在第二部分中不需要内部循环。这是一个循环使用的字典,您应该使用g[0]作为键访问该值。这将为无头文件中的每一行节省一个大型字典上的循环。如果需要,可以检查字典中是否有g[0]以避免键错误。

对于初学者,第二部分中不需要内部循环。这是一个循环使用的字典,您应该使用g[0]作为键访问该值。这将为无头文件中的每一行节省一个大型字典上的循环。如果需要,您可以检查字典中是否有g[0]以避免键错误。

由于嵌套的for循环一次又一次地在dict中徒劳地穿行,这需要花费很长时间。试试这个:

for line in hapinfile:
    q=line.rstrip('\n').rstrip('\r').split('\t')
    g=q[0:11]
    if g[0] in dictoutfile:
        g.extend( dictoutfile[g[0]] )
        o.write(str('\t'.join(g)+'\n'))

由于嵌套的for循环一次又一次地在dict中徒劳地跋涉,这需要花费很长时间。试试这个:

for line in hapinfile:
    q=line.rstrip('\n').rstrip('\r').split('\t')
    g=q[0:11]
    if g[0] in dictoutfile:
        g.extend( dictoutfile[g[0]] )
        o.write(str('\t'.join(g)+'\n'))
这里似乎有一个非常不幸的问题,您必须执行嵌套循环来查找数据。如果您可以按头字段对CSV文件进行排序,您可以获得更高的效率。实际上,利用CSV模块并压缩所有内容。您可以使用break,虽然在for循环中有点奇怪,但它至少会在您找到头文件后使您无法搜索第二个文件


这里似乎有一个非常不幸的问题,您必须执行嵌套循环来查找数据。如果您可以按头字段对CSV文件进行排序,您可以获得更高的效率。实际上,利用CSV模块并压缩所有内容。你可以使用break,虽然在for循环中有点奇怪,但一旦你找到了头文件,它至少会使你在搜索第二个文件时短路。

为什么不使用csv模块来处理csv文件呢?如果我理解这个问题,你有两个巨大的.csv文件。它们都有相同的格式,但其中一行的第一行是列名。您希望将不带列名的第二个文件附加到第一个文件。是这样吗?但第二个文件似乎充满了要覆盖的数据?不仅仅是一个标题行,然后是空白的?实际上,它看起来像是两个文件的差异。只要两个文件中都有头文件的第一个列,就可以将第一个文件的数据写入第三个文件。o、 如果您正在将这两个文件读取到内存中,这是不需要的,您可以一行一行地浏览文件。为什么不使用csv模块来处理csv文件?如果我理解这个问题,您有两个巨大的.csv文件。它们都有相同的格式,但其中一行的第一行是列名。您希望将不带列名的第二个文件附加到第一个文件。是这样吗?但第二个文件似乎充满了要覆盖的数据?不仅仅是一个标题行,然后是空白的?实际上,它看起来像是两个文件的差异。只要两个文件中都有头文件的第一个列,就可以将第一个文件的数据写入第三个文件。o、 如果您正在将这两个文件都读入内存,这是不需要的,您只需逐行浏览文件即可。谢谢,这是问题的根源。谢谢,这是问题的根源。