Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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 - Fatal编程技术网

Python 将csv中的列数据写入文本文件中的行/行

Python 将csv中的列数据写入文本文件中的行/行,python,csv,Python,Csv,我正在使用脚本读取.csv文件,读取特定列并将其写入txt文件,问题是,提取的数据以以下形式写入列: primary_channel 2 1 0 0 2 0 1 2 1 我需要它排成一行,像这样: 2,1,0,0,2,0,1,2,1 我的代码是下一个 import sys import csv import copy import os import random import fileinput import sys, glob from io import StringIO from c

我正在使用脚本读取.csv文件,读取特定列并将其写入txt文件,问题是,提取的数据以以下形式写入列:

primary_channel
2
1
0
0
2
0
1
2
1
我需要它排成一行,像这样:

2,1,0,0,2,0,1,2,1
我的代码是下一个

import sys
import csv
import copy
import os
import random
import fileinput
import sys, glob
from io import StringIO
from collections import OrderedDict
import sys
#scriptname,f1name,f2name=sys.argv

fieldnames=['node_code;node_type;wlan_code;destination_id;x(m);y(m);z(m);primary_channel;min_channel_allowed;max_channel_allowed;cw;cw_stage;tpc_min(dBm);tpc_default(dBm);tpc_max(dBm);cca_min(dBm);cca_default(dBm);cca_max(dBm);tx_antenna_gain;rx_antenna_gain;channel_bonding_model;modulation_default;central_freq (GHz);lambda;ieee_protocol;traffic_load(pkts/s)']

main={}
with open('nodos_cambiados_1.csv','r') as infile,open('lista.txt','w') as outfile:
     reader = csv.DictReader(infile,delimiter=";" )
     writer = csv.DictWriter(outfile,fieldnames=['primary_channel'],delimiter=",",extrasaction='ignore')
     writer.writeheader()
     for row in reader:
         next(reader) 
         for values in row:
             if row['node_type']=='0' in row:
                main.update({row['primary_channel']:()})

         writer.writerow(row)

我将非常感谢您在呼叫
DictWriter
时给我的帮助,请尝试添加
newline=''
。如注释所示:

任何其他可选参数或关键字参数都会传递给基础writer实例


在对
DictWriter
的调用中,尝试添加
newline='
。如注释所示:

任何其他可选参数或关键字参数都会传递给基础writer实例


如果您只想在一行上写数字,那么使用DictWriter似乎过于复杂了。我认为这样就足够了:

with open('nodos_cambiados_1.csv','r') as infile,open('lista.txt','w') as outfile:
     reader = csv.DictReader(infile,delimiter=';')
     outfile.write(','.join(row.get('primary_channel') for row in reader))

如果您只想在一行上写数字,那么使用DictWriter似乎过于复杂了。我认为这样就足够了:

with open('nodos_cambiados_1.csv','r') as infile,open('lista.txt','w') as outfile:
     reader = csv.DictReader(infile,delimiter=';')
     outfile.write(','.join(row.get('primary_channel') for row in reader))

它可能更简单,但它有一个缺点,就是将所有值加载到内存中。是的,如果您解析的数据量是任何正常人都无法放入CSV的,那么这就是一个问题。只要文件大小和可用内存的比率足够高,这就是一个问题。可能有几个进程,还有几个其他的东西存储在内存中。我并不是说这个解决方案没有好处,但它也有缺点。它可能更简单,但它有一个缺点,就是将所有值加载到内存中。是的,如果您解析的数据量是任何正常人都无法放入CSV的,这就是一个问题。无论文件大小与可用内存的比率如何,足够高了。可能有几个进程,还有几个其他的东西存储在内存中。我不是说这个解决方案没有好处,但它也有缺点。你能更具体地说明问题是什么吗?很明显,你只是一行接一行地写。您是否尝试过合并所有数据,然后将其作为一行写入?请看,。你能更具体地说明问题是什么吗?很明显,你只是一行接一行地写。您是否尝试过合并所有数据,然后将其作为一行写入?请看。