'''
二维数据的表示
使用列表类型
  - 列表类型可以表达二维数据
  - 使用二维列表
  - [[3.1398,3.1348], [3.1413, 3.1404]]
  - 使用两层for循环遍历每个元素
  - 外层列表中每个元素可以对应一行，也可以一列

CSV: Comma-Separated Values
  - 国际通用的一二维数据存储格式，一般.csv扩展名
  - 每行一个一维数据，采用逗号分隔，无空行
  - Excel软件可以读入输出，一般编辑软件都可以产生
  - 如果某个元素缺失，逗号仍要保留
  - 二维数据的表头可以作为数据存储，也可以另行存储
  - 逗号为英文半角逗号，逗号与数据之间无额外空格

二维数据存储
  - 按行或按列存都行，具体由程序决定
  - 一般索引习惯： ls[row][column]  先行后列
  - 根据一般习惯，外层列表的每个元素是一行，按行存
'''


# 二维数据的读入处理
# 从CSV格式的文件读入数据
fo = open('f.csv')
ls = []
for line in fo:
    line = line.replace("\n", "")   # 替换回车换行符
    ls.append(line.split(","))  # 按逗号分隔，将每行中的元素分隔开形成列表，加入到ls中
for i in ls:
    print(i)
fo.close()


# 将数据写入CSV格式的文件
ls = [['\n重庆','101.2', '102.0', '103.2'], 
      ['重庆','101.2', '102.0', '103.2'], 
      ['重庆','101.2', '102.0', '103.2']]   # 二维列表
f = open('f.csv', 'a')
for item in ls:
    # 每个元素逗号分隔，最后加换行符
    f.write(",".join(item) + "\n")
f.close()
# 查写入后的数据
f = open('f.csv')
for line in f.readlines():
    print(line.replace("\n",""))


# 二维数据的逐一处理
# 采用二层循环
ls = [['天津','101.0', '102.1', '103.2'], 
      ['台北','101.3', '102.4', '103.5'], 
      ['香港','101.6', '102.7', '103.8']]   
for row in ls:
    for column in row:
        print(column)