1. Read a CSV table from stdin.
2. Reshape the table by collapsing several columns into two.
3. Write the reshaped data to stdout
import csv,sys
#输入数据
def input_data():
in_data_list = []
while True:
row = sys.stdin.readline().strip()
if row =="":
break
li = row.split(",")
in_data_list.append(li)
out_data_list=[]
for line in in_data_list:
if "first" not in locals():
first = True
onefidle = line[0]
twofidle = line[1]
threefidle = line[2]
else:
d_temp={}
d_temp[onefidle] = line[0]
d_temp[twofidle] = line[1]
d_temp[threefidle] = line[2]
out_data_list.append(d_temp)
return out_data_list
# write file to csv file
def writeCVS(file,data):
with open(file, 'w', newline='') as f:
fieldnames = ['country', '1999', '2000']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
#change data
def changeCVS(file):
rechange_list =[]
with open(file, "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
rechange_list.append({"country":row['country'],"year":1999,"cases":row['1999']})
rechange_list.append({"country":row['country'],"year":2000,"cases":row['2000']})
rechange_list.sort(key=lambda x:x["year"])
with open("test.csv", 'w', newline='') as f:
fieldnames = ['country', 'year', 'cases']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rechange_list)
def read_csv(file):
with open(file, "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(f"{row[0]},{row[1]},{row[2]}")
if __name__ == '__main__':
#输入数据
data =input_data()
#写入数据到Csv中
writeCVS('student3.csv',data)
#转换数据格式存入test.csv中
changeCVS('student3.csv')
#从test.csv中读出转换后的数据
read_csv('test.csv')
输入数据:
country,1999,2000
A,0.7K,2K
B,37K,80K
C,212K,213K
输出数据:
country,year,cases
A,1999,0.7K
B,1999,37K
C,1999,212K
A,2000,2K
B,2000,80K
C,2000,213K