Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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,这是新的输入文件格式。我需要使用python自动替换.csv文件中一列的内容。我也可以使用记事本打开.csv文件并替换该列的内容,但该文件非常庞大,需要很长时间 Name ID class Num "kanika",""University ISD_po.log";" University /projects/asd/new/high/sde"

这是新的输入文件格式。我需要使用python自动替换.csv文件中一列的内容。我也可以使用记事本打开.csv文件并替换该列的内容,但该文件非常庞大,需要很长时间

Name                          ID                                                class  Num
"kanika",""University ISD_po.log";" University     /projects/asd/new/high/sde"","MBA","12"
"Ambika",""University ISD_po.log";" University     /projects/asd/new/high/sde"","MS","13"
在上面,我需要替换ID列的内容。ID列非常不一致,因为它的内容中有较大的空格和(;,/)等符号。ID列中的新内容应为“输入”

此Id列用2个双引号括起来,并有一些额外的空格。而其他列只有1个双引号


用python有什么方法可以做到这一点吗

您可以使用Python中的csv模块来实现这一点

csv.reader将以字符串列表的形式返回每一行。然后,您可以使用csv.writer对每一行进行流式处理,并在此时修改ID列,这将创建一个新文件

因此:


逐行读取.csv,在
上拆分,并将第二列替换为“input”。 边走边写(到另一个文件):

f = open('mycsv.csv','rb')
fo = open('out.csv','wb')

# go through each line of the file
for line in f:
    bits = line.split(',')
    # change second column
    bits[1] = '"input"'
    # join it back together and write it out
    fo.write( ','.join(bits) )

f.close()
fo.close()

然后,如果愿意,您可以重命名它以替换原始文件。

使用csv模块更安全。如果在“
”和“
之间有逗号,则不应在它们之间拆分。干杯,我不知道csv模块。每天学习新的东西!我仍然推荐@timc的
csv
answer,使用定制的csv解析器比使用自制代码更安全,尤其是当它是一个内置模块时,代码不会膨胀!非常正确。但在我的情况下,你的代码运行良好。该代码会更改文件的类型。输出文件不再以.csv逗号分隔。不要使用wb模式!!它将覆盖每一行,直到最后一行。ab不是更好吗?我只是复制了你的代码并更改了输入文件名。我在“wb”处遇到语法错误。“\u csv.reader”对象不可订阅--这是错误请确保您的最终语句是writer.writerow([row[0],“input”,row[2],row[3])。请参阅“行”而不是“读者”是的,谢谢。它正在工作,但已删除所有数据中的逗号和“”。如果文件包含一些空列并用“”括起来,那么您可能会错过所有内容。
f = open('mycsv.csv','rb')
fo = open('out.csv','wb')

# go through each line of the file
for line in f:
    bits = line.split(',')
    # change second column
    bits[1] = '"input"'
    # join it back together and write it out
    fo.write( ','.join(bits) )

f.close()
fo.close()