使用python更改CSV文件中列的值

时间:2016-08-26 11:45:20

标签: python csv

我是python的新手,只需要一点帮助。

我们有一个管道分隔的CSV文件,如下所示

DATE|20160101
ID | Name | Address | City | State | Zip   | Phone | OPEID  | IPEDS |
10 | A... | 210 W.. | Mo.. | AL... | '31.. | 334.. | '01023 | 10063 |
20 | B... | 240 N.. | Ne.. | Ut... | '21.. | 335.. | '01024 | 10064 |

Zip和OPEID列的每个值在开头都有撇号

因此,我们希望创建一个新的CSV文件,其中从这两列的每个值中删除撇号。

新文件应如下所示:

DATE|20160101
ID | Name | Address | City | State | Zip  | Phone | OPEID | IPEDS |
10 | A... | 210 W.. | Mo.. | AL... | 31.. | 334.. | 01023 | 10063 |
20 | B... | 240 N.. | Ne.. | Ut... | 21.. | 335.. | 01024 | 10064 |

此代码适用于复制数据而不删除撇号

import os
import csv

file1 = "D:\CSV\File1.csv"
with open(file1, 'rb') as csvfile:

         reader = csv.reader(csvfile, delimiter = '|')

         path = "D:/CSV/New"
         if not os.path.exists(path):
             os.makedirs(path)

         writer = csv.writer(open(path+"File2"+".csv", 'wb'), delimiter = '|')

         for row in reader:
             writer.writerow(row)

csvfile.close()

4 个答案:

答案 0 :(得分:0)

以下代码对于所有文件格式都是相同的。它是* .csv的事实并没有改变一件事。它实际上是做什么的,它是在你想要删除撇号my_csv_in的文件中,并且每次用任何东西替换它们时都会逐行解析(a.k.a删除)。修改后的行将写入第二个文件my_csv_out

my_csv_in = r'full_file_path_to_csv_in.csv'
my_csv_out = r'full_file_path_to_csv_out.csv'

with open(my_csv_in, 'r') as f_in:
    with open(my_csv_out, 'w') as f_out:
        for line in f_in:
            f_out.write(line.replace("'", ''))

可能有更好的方法来利用文件为* .csv并使用csv库。您可以查看quoting options中的documentation

答案 1 :(得分:0)

要删除撇号,您可以使用replace function,只需要逐个获取每个单元格的内容,并将撇号替换为:

new = old.replace("'", "")

更简单地说,使用任何文件编辑器打开您的csv文件,然后搜索并替换"'""。

答案 2 :(得分:0)

它对我有用......试试这个。

res=[]
with open('hi.csv') as f:
    content=csv.reader(f,delimiter='|')
    for row in content:
        for str in range (len(row)):
            row[str]=row[str].replace('\'','')
        res.append(row)
    f.close()
with open('hi.csv','wb') as ff:  # python 3 => 'wb' => 'w',newline=''
    sw=csv.writer(ff,delimiter='|',quoting=csv.QUOTE_MINIMAL)
    for rows in res:
        sw.writerow(rows)
ff.close()

答案 3 :(得分:0)

你可以用Pandas非常高效地完成它 - 如果你的文件非常大,这将是很好的:

{{1}}