如何从csv文件中选择值并使用python将其写入另一个csv文件

时间:2018-02-23 20:51:47

标签: python list csv mod-rewrite

我有一个从CSV文件中读取的python脚本,并检查记录是否符合条件。

  • row [0] ==>日期类型日期
  • row [10] ==>风速型浮球
  • row [11] ==>雾型布尔

这些是我需要选择并将结果写入另一个csv文件的列。

问题是系统会创建第二个csv文件,但 EMPTY

,系统显示此错误:

append() takes exactly one argument (3 given)

但是我需要将3个列表分配到一个名为 result

的变量列表中

我的代码中的错误在哪里?

的代码:

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],row[10],row[11])
    except Exception as e:
        print("{}:{}".format(index ,e))

with open("C:/Users/test/Documents/Python_Projects/rduSpeedFog.csv", "w") as f:
    fwriter=csv.writer(f,mydelimeter)
    for row in result:
        fwriter.writerows(row[0],row[10],row[11])
    print("Writing Complete")
f.close()

3 个答案:

答案 0 :(得分:0)

Here is the documentation on the list.append() function

  

list.append(x)的

     

将项目添加到列表的末尾;相当于[len(a):] = [x]。

该函数被设计为接受一个参数(在这种情况下,x),但是你将它传递给三个不同的东西,因此错误:

  

append()只取一个参数(给定3个)

你应该一次传递它,或者甚至更好地传递它,例如:

l = []
values = [foo[0], foo[1], foo[2]]
for v in values:
    l.append(v)

答案 1 :(得分:0)

首先将值作为列表或元组添加到result列表

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

然后,当你通过

将它们写入另一个文件时
for row in result:
    fwriter.writerow(row)
#or instead just
fwriter.writerows(result) 

答案 2 :(得分:0)

您希望使用3个字段resultrow[0]和行[11]追加row[10]行。 因此,将它们放在一个列表中并将列表附加到结果:

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

写入csv文件时,您希望使用writerow()一次编写一个新行:

for row in result:
    fwriter.writerow(row)

或者,一次写入结果中的所有行:

fwriter.writerows(result)