我有一个从带有标题的csv文件中的SQL服务器导入的数据。
我想在python2.7中编写一个**代码,它可以读取一个csv文件并将其重新写入新的csv文件中,在该文件中我们使用正则表达式掩盖了最后2列,如#SEC; SECRET VALUE& #39;
CSV的示例输入:
ID,Name,city,SSN,CreditCardNo
1,Joy,London,123-465-456,123456789087645
2,Sam,NewYork,765-465-457,98765434567345
3,Jhon,Paris,678-365-654,765654542345677
4,Eric,Delhi,456-888-999,123456789087645
预期的样本输出:
ID,Name,city,SSN,CreditCardNo
1,Joy,London,SECRET VALUE,SECRET VALUE
2,Sam,NewYork,SECRET VALUE,SECRET VALUE
3,Jhon,Paris,SECRET VALUE,SECRET VALUE
4,Eric,Delhi,SECRET VALUE,SECRET VALUE
我的尝试:
import sys
import csv
r = csv.reader(open('C:\\Users\\Praveen\\workspace\\sampleFiles\\test1.csv'))
lines = [l for l in r]
lines[2][2] = '30'
writer = csv.writer(open('C:\\Users\\Praveen\\workspace\\sampleFiles\\test4.csv', 'wb'))
writer.writerows(lines)
这只会改变一个元素,我希望整个列被屏蔽。
答案 0 :(得分:0)
我认为您首先需要read_csv
,然后用iloc
替换值,最后按DataFrame.to_csv
写入文件:
import pandas as pd
from pandas.compat import StringIO
temp=u"""ID,Name,city,SSN,CreditCardNo
1,Joy,London,123-465-456,123456789087645
2,Sam,NewYork,765-465-457,98765434567345
3,Jhon,Paris,678-365-654,765654542345677
4,Eric,Delhi,456-888-999,123456789087645"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp))
print df
ID Name city SSN CreditCardNo
0 1 Joy London 123-465-456 123456789087645
1 2 Sam NewYork 765-465-457 98765434567345
2 3 Jhon Paris 678-365-654 765654542345677
3 4 Eric Delhi 456-888-999 123456789087645
df.iloc[:, -2:] = 'SECRET VALUE'
print df
ID Name city SSN CreditCardNo
0 1 Joy London SECRET VALUE SECRET VALUE
1 2 Sam NewYork SECRET VALUE SECRET VALUE
2 3 Jhon Paris SECRET VALUE SECRET VALUE
3 4 Eric Delhi SECRET VALUE SECRET VALUE
df.to_csv('file.csv', index=False)