Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.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_Pandas - Fatal编程技术网

Python 如何停止在csv文件末尾写入空行-熊猫

Python 如何停止在csv文件末尾写入空行-熊猫,python,csv,pandas,Python,Csv,Pandas,将数据保存到csv时,data.to_csv('csv_data',sep=',',encoding='utf-8',header=False,index=False),它会在csv文件的末尾创建一个空行 你如何避免这种情况 这与行\ u终止符有关,对于新行,它的默认值是n 是否有一种方法来指定 LynEnter Tealor 以避免在结尾创建空白行,或者是否需要读取CSV文件,删除空白行并保存它? 不熟悉熊猫。我们将感谢您的帮助,提前感谢 一种方法是使用默认的行终止符(\n)保存除最后一个条目

将数据保存到csv时,
data.to_csv('csv_data',sep=',',encoding='utf-8',header=False,index=False)
,它会在csv文件的末尾创建一个空行

你如何避免这种情况

这与
行\ u终止符有关,对于新行,它的默认值是
n

是否有一种方法来指定<代码> LynEnter Tealor <代码>以避免在结尾创建空白行,或者是否需要读取CSV文件,删除空白行并保存它?


不熟悉熊猫。我们将感谢您的帮助,提前感谢

一种方法是使用默认的
行终止符(
\n
)保存除最后一个条目之外的数据,并在最后一行附加
行终止符=“


由于某种原因,当我尝试它时,行终止符不起作用。(它给出了一个错误,称第_行终止符是一个无法识别的关键字参数。)

但是,这将实现以下目的:

    df.to_csv(path)
    with open(path) as f:
        lines = f.readlines()
        last = len(lines) - 1
        lines[last] = lines[last].replace('\r','').replace('\n','')
    with open(path, 'w') as wr:
        wr.writelines(lines)

更有效的方法是首先打开文件,写入该流,然后删除最后一行换行符:

import os
with open('csv_data', 'wb') as dst:
    data.to_csv(wb, sep=',', encoding='utf-8', header= False, index = False)
    dst.seek(-1, os.SEEK_END) # <---- 1 : len('\n')
    dst.truncate()
导入操作系统
以open(“csv_数据”、“wb”)作为dst:
数据到csv(wb,sep=',',编码='utf-8',头=假,索引=假)
dst.seek(-1,os.seek_END)#
函数有一个名为line_terminator的参数,默认值为“\n”。这个新行字符是当前的问题

上面的代码:
1) 将数据帧正常写入文件
2) 打开文件并将字节数据读入文件\数据变量

3) 将file\u data变量写回同一个文件,但使用splice:file\u data[:-2]修剪“\n”

一种解决方案是不使用pandas将数据导出到文件。下面的示例不会在文件末尾包含空行。然而,它可能比熊猫的“to_csv”方法慢得多


在最后一行的末尾有一个换行符是相当标准的。为什么会出现问题?csv文件将被另一个脚本使用,无法接受空行或额外的空格,脚本将中断。我无法访问这些脚本。目前,我正在复制数据,将其粘贴到vim中,并每次删除最后一行。我将尽可能地自动化它。如果将
None
作为文件名传递,pandas将返回一个字符串对象
s=data.to_csv(无,sep=',')
例如。您可以直接将
s[:-1]
写入文件。但是我不确定编码。你能试试吗?@medev21结果是csv。你可以简单地用普通Python将其写入一个文件。是的,juanpa是正确的,它是csv。您可以使用
open('test.txt','w')写入文件。写入(s[:-1])
若要克服此错误,请使用以下语法:data.iloc[-1:,0:-1]。要写入csv(index=False,sep=',',',header=False,mode='a',line_terminator=“”),最后一行变成一个系列,然后每一列变成一行。。。
import os
with open('csv_data', 'wb') as dst:
    data.to_csv(wb, sep=',', encoding='utf-8', header= False, index = False)
    dst.seek(-1, os.SEEK_END) # <---- 1 : len('\n')
    dst.truncate()
file_out = r'c:\your_output_file_path\file_name.csv'
df.to_csv(file_out)
file_data = open(file_out, 'rb').read()
open(file_out, 'wb').write(file_data[:-2])
import pandas as pd

def export_dataframe_to_file( 
        df: pd.DataFrame, file_name: str, 
        header=True, index=True, delimiter=',',
        line_terminator='\n', encoding='utf-8' 
        ) -> None:
    '''
    This function exports a Pandas DataFrame to a file without
    including an empty row at the very end of the file.
    '''
    number_of_rows, current_row = len(df), 1
    with open(file_name, 'w', encoding=encoding) as file :
        if header:
            file.write( 
                delimiter*index + delimiter.join(df.columns) \
                + line_terminator 
                )
        for df_index, series in df.iterrows():
            file.write( 
                (str(df_index) + delimiter)*index \
                + delimiter.join(series.astype( str )) \
                + line_terminator*(not not number_of_rows - current_row)
                )
            current_row += 1
    return