如何用python编写csv文件

2024-06-25 06:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,从csv文件中读取并将值存储在一个列表中, 其中的值是日期行[0]、浮点行[10]、布尔行[11]。在

脚本在读取部分工作得很好,但当我试图将选定的值写入第二个CSV文件时,系统会创建一个文件,其中只包含头文件,系统崩溃并显示以下错误:

line 62, in
fwriter.writerow("{}:{}:{}".format(row[0],row[10],row[11]))

builtins.IndexError: string index out of range

代码中的错误在哪里?在

代码:

          import csv

            mydelimeter = csv.excel()
            mydelimeter.delimiter=";"
            myfile = open("C:/Users/test/Documents/R_projects/homework/rdu-weather-history.csv")

            # read the first line in the opened file ==> Header
            myfile.readline()

            myreader=csv.reader(myfile,mydelimeter)

            result=[]

            '''
            create a variable that handle values of the 3 fields
 ==> Date - fastest5secwindspeed - fog
             and display the result where  
                 fog ==> Yes    and highest speed  more than 10.
            '''

            for index ,row in enumerate(myreader):
                try:
                    '''
                    check if the values in the fog colums is == Yes 
                    if ok 
                    check if the column of the "fastwindspeed" 
is  empty ==>  raise Exception
                    check if the value in column of the "fastwindspeed"
 is < 10.0 ==>  raise Exception

                    else  print the results
                    '''
                    if row[11] =="Yes":
                        if row[10] in (None, ""):
                            raise Exception( "this Record has empty value" )
                        if float(row[10]) < 10.0:
                            raise Exception( 'the wind speed  is below 10 mph in ' + row[0] )            
                        print(row[0],row[10],row[11])
                        '''
                        append the result into a list
 in order to use it in the writing of the new csv file  
                        '''
                        result.append(row[0])
                        result.append(row[10])
                        result.append(row[11])
                except Exception as e:
                    print("{}:{}".format(index ,e))
          myfile.close()
             '''
    create a second csv file and append the selected result from the  1st csv file 
    '''  
            with open("C:/Users/test/Documents/Python_Projects/rduSpeedFog.csv", "w") as f:
                headers = ["Date","WindSpeed","Fog"]

                fwriter=csv.writer(f,mydelimeter)

                fwriter.writerow(headers)

                for row in result:


                    fwriter.writerow("{}:{}:{}".format(row[0],row[10],row[11]))

                print("Writing Complete")
            f.close()

在使用了@Bamar的答案之后

我得到了这个结果

csv file as result


Tags: ofcsvtheinifisexceptionresult
2条回答

在第一个循环中,每个字符串被放入result列表的单独元素中,因此它不是一个行列表。在

您应该将该循环更改为使用:

result.append([row[0], row[10], row[11]])

将这些字段附加为每行的列表。在

在第二个循环中,您将使用csv.writer,因此它将添加分隔符,而您不应该使用format。写下:

^{pr2}$

如果希望输出文件中的字段分隔符是:,请使用:

fwriter=csv.writer(f,":")

writerow接受序列作为参数,但您传递的是字符串。尝试以列表形式传递值。在

相关问题 更多 >