CSV文件:Comma-Separated Values,逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。用文本文件和Excel都可以打开CSV文件。
下面是分别用excel和记事本打开的两个csv文件。
规范的t.csv
非规范的test.csv
注意:
如果单元格内容中存在逗号,那么这个单元格内容会用双引号分隔出来。如图中test.csv中第一个单元格。
一般的csv文件都有规范的表头和对应的每行数据,前两张图片中打开的都是规范的csv文件,后两张图片打开的是非规范的csv文件,而Python的csv库中也只有对csv文件整行的操作,并没有像excel一样可以对任意单元格操作,所以要对非规范的csv文件操作任意单元格是困难的。
本文实现了对非规范的csv文件的操作。
思路:csv–>二维列表–>通过列表定位单元格–>列表重写成csv
代码如下:
import csv
class Handle_csv:
# 定义存放csv内容的list
csv_list = []
def __init__(self, filename):
self.filename = filename
with open(self.filename)as f:
self.csv_list = list(csv.reader(f))
# 在(n,m)第N行第M列空白单元格处插入或者修改内容
def mod_csv(self, n, m, value):
self.csv_list[n - 1][m - 1] = value
# 获取第n行第m列单元格内容
def get_value(self, n, m):
return self.read_csv()[n - 1][m - 1]
# 把修改过的list转csv
def list2csv(self, file_path):
try:
f = open(file_path, 'w')
for items in self.csv_list:
for item in items:
f.write(item)
f.write(',')
f.write('\n')
except Exception as e:
print(u'文件写入失败!,请检查文件路径及列表格式是否正确')
finally:
f.close()
if __name__ == '__main__':
h_csv = Handle_csv(u'test.csv')
h_csv.mod_csv(2, 2, u'内容')
h_csv.list2csv(u'test.csv')
读取出的二维list
[['这是一段文字,', '2', '3', '', ''], ['名称', '内容', '内容', '', '5'], ['6', '7', '', '', '']]