Hola, intentare darte algo de lo que yo entiendo:
Primero que nada en Python no tratan como cualquier archivo a un CSV, ya que este muchas veces viene generado desde Excel o es un archivo al que se usara para el manejo de importacion o exportacion de datos, para ello existe un modulo que contiene clases para el manejo de este tipo de archivos, como lo dice en la documentacion :
The csv module implements classes to read and write tabular data in CSV format.
The csv module’s reader and writer objects read and write sequences.
Con respecto a la linea :
Lo que hace es convertir el archivo en un objeto editable, esto sucede porque writer() es una clase del modulo csv a la cual se le puede implementar cualquier funcion perteneciente a la misma clase, ademas de eso puede colocarse como parametro ademas del archivo CSV el delimitador de este, tal como dice en la documentacion:
Return a writer object responsible for converting the user’s data into delimited strings on the given file-like object. csvfile can be any object with a write() method.
https://docs.python.org/2/library/csv.html#csv.writer
Ejemplo, si te fijas le envian ciertos parametros al momento de instanciar el archivo como objeto editable, estos pueden ser parametros de formatos o de dialectos:
Lista de parametros de dialectos y formato:
https://docs.python.org/2/library/csv.html#csv-fmt-params
Ahora bien, con respecto a la funcion writerow() la verdad es que no creo que sea necesario colocar doble parentesis, primero leamos lo que nos dice la documentacion sobre esta funcion:
Write the row parameter to the writer’s file object, formatted according to the current dialect.
https://docs.python.org/2/library/csv.html#csv.csvwriter.writerow
En ningún momento mencionan algo sobre doble parentesis, lo que si se es que debes enviar a esta funcion una tupla o lista para especificar en que posicion escribiras el dato que envias, veamos este ejemplo:
En el ejemplo anterior se colocan en una tupla 3 datos, cada uno en su posicion que por defecto serian:
Entonces aquella tupla se la envia como parametro y al momento de hacer el writerow(), el resultado por ejemplo seria algo asi:
Si te fijas cada elemento de la tupla se ha colocado en una posicion, abe recalcar que es solo un ejemplo, que usa como delimitadores la coma, este delimitador se debe espicifcar al instanciar el objeto editable, tambien es posible enviar una lista como en el ejemplo de la documentacion:
Lo importante es enviar en un orden los datos, aunque es posible usar tambien el bucle for para escribir una columna o columnas, pero debes tener en cuenta que este no llevara un orden explicito a menos que la variable que vayas a iterar con este contenga el mismo numero de columnas y de esa forma podrás mantener una escritura al archivo mas controlada.
Aqui hay un ejemplo:
http://www.linuxjournal.com/content/handling-csv-files-python
En fin, espero no haberte confundido y hayas entendido, te recomiendo siempre cuando tengas dudas leer la documentacion o jugar con el codigo y descubrir a base de prueba y error las dudas que tengas.
Cualquier duda nos comentas!
Saludos