根据用户响应修改CSV值



我有一个csv文件,看起来像这样:

Names, Size, State, time1,   time2,       
S1,    22,   MD  , 0.022, ,  523.324
S2,    22,   MD  , 4.32,  , 342.54 
S3,    22,   MD  , 3.54,  ,   0.32
S4,    22,   MD  , 4.32,  ,  0.54  
S1,    33,   MD  , 5.32,  ,  0.43
S2,    33,   MD  , 11.54, ,  0.65
S3,    33,   MD  , 22.5,  ,  0.324
S4,    33,   MD  , 45.89  ,  0.32
S1,    44,   MD  , 3.53   ,  3.32
S2,    44,   MD  ,  4.5   ,  0.322
S3,    44,   MD  , 43.65  ,   45.78
S4,    44,   MD,   43.54 , 0.321

下面是我重新格式化数据的代码:

 import csv
 with open(r'C:UserstestuserDesktopraw_inpuy.csv.csv','rb') as csvfile:
    reader=csv.reader(csvfile, delimiter=',')
    first=True
     data={}
      column= input("What column do you want to see:  (x,y,z)")
       for row in reader:
             size = int(row[1])
             column = float(row[3]) # the problem lies here. I know that the column header plus row # must match but I do not know how to code it 
    if not size in data:
        data[size] = []
    data[size].append(column)

writer = csv.writer(sys.stdout)
writer.writerow(["Size", "S1", "S2", "S3", "S4"])
   for item in data:
    row = [item]
    row.extend(data[item])
   writer.writerow(row)

输出到csv:

 Size,S1,S2,S3,S4
 33,5.32,11.54,22.5,45.89
 44,3.53,4.5,43.65,43.54
 22,0.022,4.32,3.54,4.32

这是正确的,但它只显示time1列,但我希望能够也看到time2列,如果我要求它。还有一个time3列我没有包含即使我请求用户输入并将其声明为一个变量,即使我请求time2列,它仍然只打印time1列。

你可以试试这个:(注意,我必须从csv的第一列中去掉空白和尾随逗号…还要注意,在示例csv)

中留下了一些不一致的命令。
import io
from csv import DictReader
csvfile = io.StringIO('''Names,Size,State,time1,time2
S1,    22,   MD  , 0.022 ,  523.324
S2,    22,   MD  , 4.32  , 342.54 
S3,    22,   MD  , 3.54  ,   0.32
S4,    22,   MD  , 4.32  ,  0.54  
S1,    33,   MD  , 5.32  ,  0.43
S2,    33,   MD  , 11.54 ,  0.65
S3,    33,   MD  , 22.5  ,  0.324
S4,    33,   MD  , 45.89 ,  0.32
S1,    44,   MD  , 3.53  ,  3.32
S2,    44,   MD  ,  4.5  ,  0.322
S3,    44,   MD  , 43.65 ,   45.78
S4,    44,   MD,   43.54 , 0.321
''')

reader = DictReader(csvfile, delimiter=',')
first = True
data={}
col_name = input("What column do you want to see:  (x,y,z)")
for row in reader:
    # print(row)
    size = int(row['Size'])
    column = float(row[col_name])
    if not size in data:
        data[size] = []
    data[size].append(column)
print(data)

output (for time1);

What column do you want to see:  (x,y,z)time1
{33: [5.32, 11.54, 22.5, 45.89], 44: [3.53, 4.5, 43.65, 43.54], 
 22: [0.022, 4.32, 3.54, 4.32]}

你可以写成

import io
from csv import DictWriter
out_csv = io.StringIO('''''')
fieldnames = ['Size', col_name]
writer = DictWriter(out_csv, fieldnames=fieldnames)
writer.writeheader()
for key, value in data.items():
    row = {'Size': key, col_name: value}
    print(row)
    writer.writerow(row)
print(out_csv.getvalue())
这个输出:

Size,time2
33,"[0.43, 0.65, 0.324, 0.32]"
44,"[3.32, 0.322, 45.78, 0.321]"
22,"[523.324, 342.54, 0.32, 0.54]"

最新更新