Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何向现有csv文件添加标题?_Python_Csv - Fatal编程技术网

Python 如何向现有csv文件添加标题?

Python 如何向现有csv文件添加标题?,python,csv,Python,Csv,我知道这是一个非常基本的问题。 我有一个CSV文件,其中已经包含数据。此文件是自动生成的,不使用带读写器的打开或打开对象 目标 我想打开一个现有文件 将标题追加到第一行(移动第一行数据) 保存文件 返回文件 有什么线索吗 cursor.execute(sql, params + (csv_path,)) 此命令生成不带标头的文件 代码 尝试 为您提供有关结果列的信息 cursor.execute(sql, params + (csv_path,)) columns = [column[0] f

我知道这是一个非常基本的问题。 我有一个CSV文件,其中已经包含数据。此文件是自动生成的,不使用带
读写器的打开或打开对象

目标
  • 我想打开一个现有文件
  • 将标题追加到第一行(移动第一行数据)
  • 保存文件
  • 返回文件
  • 有什么线索吗

    cursor.execute(sql, params + (csv_path,))
    
    此命令生成不带标头的文件

    代码 尝试 为您提供有关结果列的信息

    cursor.execute(sql, params + (csv_path,))
    columns = [column[0] for column in cursor.description]
    
  • 将上述信息写入新文件
  • 将旧的csv内容附加到新文件
  • 使用旧文件名重命名新文件

  • 不太清楚您是否尝试读取现有csv文件,但要从磁盘上读取没有列名的csv文件:

    使用dictreader/dictwriter并指定文件中的列名

    Python 3:

    import csv
    ordered_filenames = ['animal','height','weight']
    
    with open('stuff.csv') as csvfile, open("result.csv","w",newline='') as result:
        rdr = csv.DictReader(csvfile, fieldnames=ordered_filenames)
        wtr = csv.DictWriter(result, ordered_filenames)
        wtr.writeheader()
        for line in rdr:
            wtr.writerow(line)
    
    将stuff.csv放在同一目录中:

    elephant,1,200
    cat,0.1,1
    dog,0.2,2
    
    以及输出结果文件:

    animal,height,weight
    elephant,1,200
    cat,0.1,1
    dog,0.2,2
    

    等一下。如果你还没有打电话

    cursor.execute(sql, params + (csv_path,))
    
    然后您就有机会从一开始就正确地编写CSV文件。您不需要编写带有标题行的新文件,然后将所有CSV复制到新文件中,依此类推。这既慢又低效,而且是您唯一的选择--如果您真的必须在现有文件前加一行

    如果您还没有编写CSV文件,并且知道
    标题
    ,则可以使用
    选择将其添加到SQL中。。。联盟。。。选择

    header = ['foo', 'bar', 'baz', ]
    query = ['SELECT {} UNION'.format(','.join([repr(h) for h in header]))]
    sql, params = queryset.query.sql_with_params()
    query.append(sql)
    sql = '''INTO OUTFILE %s
             FIELDS TERMINATED BY ','
             OPTIONALLY ENCLOSED BY '"'
             LINES TERMINATED BY '\n' '''
    query.append(sql)
    sql = ' '.join(query)         
    csv_path = os.path.join(settings.MEDIA_ROOT + '\\tmp', csv_filename)
    
    cursor = connection.cursor()
    cursor.execute(sql, params + (csv_path,))
    

    演示:

    生成包含以下内容的文件
    /tmp/out

    foo bar
    baz quux
    

    cat file>>头文件
    @Vor-不仅在python中不是这样(它使用的是linux CLI),而且它还将内容附加到文件的末尾,而不是开头。您所说的cat file>>头文件是什么意思?我想在python中使用它,您需要移动第一行,并在那里写入标题。但是代码是什么?SQL代码与实际问题无关,可以删除。columns=[column[0]表示游标中的列。description]TypeError:“NoneType”对象不可用iterable@Jack,确保在访问
    description
    属性之前,使用
    SELECT..
    语句调用了
    execute
    。添加了代码。请检查。@Jack,请不要将
    插入到…
    部分。我需要将
    插入到
    部分,因为我想将这个大的csv流式传输到响应中。字段列表中的未知列出现错误,请检查我问题的更新。抱歉,我使用了错误的引号类型。不要使用反勾号;对文字标题名称使用双引号:
    选择“网站”联合…
    。(如果列名称需要,请使用反勾号。)添加反勾号对我来说很有效。非常感谢你们,这真是天才的做法。
    header = ['foo', 'bar', 'baz', ]
    query = ['SELECT {} UNION'.format(','.join([repr(h) for h in header]))]
    sql, params = queryset.query.sql_with_params()
    query.append(sql)
    sql = '''INTO OUTFILE %s
             FIELDS TERMINATED BY ','
             OPTIONALLY ENCLOSED BY '"'
             LINES TERMINATED BY '\n' '''
    query.append(sql)
    sql = ' '.join(query)         
    csv_path = os.path.join(settings.MEDIA_ROOT + '\\tmp', csv_filename)
    
    cursor = connection.cursor()
    cursor.execute(sql, params + (csv_path,))
    
    mysql> SELECT "foo", "bar" UNION SELECT "baz", "quux" INTO OUTFILE "/tmp/out";  
    
    foo bar
    baz quux