Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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中使用for循环处理,但只编写第一行_Python_Csv_Read Write - Fatal编程技术网

按原样写下每一行';在python中使用for循环处理,但只编写第一行

按原样写下每一行';在python中使用for循环处理,但只编写第一行,python,csv,read-write,Python,Csv,Read Write,我有一些代码,我正试图优化,以提高效率。其中一部分是处理我的文件,处理完每一行后,立即将其写入csv。这非常理想,因为这样我就不会因为处理数据而浪费内存,然后将数据加载到列表中以写出整个列表。如果我将整个处理过的数据添加到列表中,我可以毫无困难地将其写入csv,如下所示,在下将折叠的数据写入csv: 注意:#数据处理下的代码是可靠的,我只需要帮助在处理每一行时写出它。 # data processing seen = set() folded_data = [] for u in name_no

我有一些代码,我正试图优化,以提高效率。其中一部分是处理我的文件,处理完每一行后,立即将其写入
csv
。这非常理想,因为这样我就不会因为处理数据而浪费内存,然后将数据加载到列表中以写出整个列表。如果我将整个处理过的数据添加到列表中,我可以毫无困难地将其写入
csv
,如下所示,在
下将折叠的数据写入csv

注意:#数据处理下的代码是可靠的,我只需要帮助在处理每一行时写出它。

# data processing
seen = set()
folded_data = []
for u in name_nodes:
#    seen=set([u]) # print both u-v, and v-u
    seen.add(u) # don't print v-u
    unbrs = set(B[u])
    nbrs2 = set((n for nbr in unbrs for n in B[nbr])) - seen
    for v in nbrs2:
        vnbrs = set(B[v])
        common = unbrs & vnbrs
        weight = len(common)
        row = u, v, weight
        folded_data.append(row)

# write folded_data to csv
with ('out_file.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(folded_data)
然而,当我尝试在处理过程中写出每一行时,我只得到'out_file.csv'中的第一行

# data processing
seen = set()
for u in name_nodes:
    # seen=set([u]) # print both u-v, and v-u
    seen.add(u) # don't print v-u
    unbrs = set(B[u])   
    nbrs2 = set((n for nbr in unbrs for n in B[nbr])) - seen
    for v in nbrs2:
        vnbrs = set(B[v])
        common = unbrs & vnbrs
        weight = len(common)
        row = u, v, weight
        # write row for each line to csv
        with open('out_file.csv', 'wb') as f:
            writer = csv.writer(f)
            writer.writerow(row)

我已经尝试着移动我的编写代码来实现我希望的工作,但我还没能理解

我怀疑你是第一行还是最后一行。对于您写出的每一行,您都会重新打开文件,删除以前的内容。打开文件并在循环之外创建csv编写器。

我不会担心“浪费”内存,除非您的程序要求(例如)超过系统内存的1/2。如果您的CSV在数十亿字节(或更大)范围内,则这是一个问题

如果您的csv没有这么大,您的文件将在内存中的OS文件缓存中结束,除非您有一些非标准的内核设置


要以“高效”的方式(即不将数据显式存储在内存中),您需要在for循环之前打开文件。

在@etep和@MarkRansom的帮助下解决了这个问题!在整个
for循环
之前,我必须打开文件并定义
writer

# open file and define writer
with open('out_file.csv', 'wb') as f:
    writer = csv.writer(f)

    # data processing
    seen = set()
    for u in name_nodes:
    #    seen=set([u]) # print both u-v, and v-u
        seen.add(u) # don't print v-u
        unbrs = set(B[u])
        nbrs2 = set((n for nbr in unbrs for n in B[nbr])) - seen
        for v in nbrs2:
            vnbrs = set(B[v])
            common = unbrs & vnbrs
            weight = len(common)
            row = u, v, weight
            # write row for each record
            writer.writerow(row)

你是想优化速度还是内存?@mattingly890-主要是内存,就像目前一样,试图将所有内容加载到列表中,然后写出列表,我的内存不足。虽然让它跑得更快也不是件坏事!:)我试图写出的文件大约占我系统内存的3/4。