gpt4 book ai didi

postgresql - 在用 pandas 导出到 csv 的数据中发现文字换行符/回车符

转载 作者:行者123 更新时间:2023-11-29 12:18:15 26 4
gpt4 key购买 nike

我有以下文本文件,每行末尾都有 CRLF,并且有相对较少的坏行(b'跳过第 55000 行:预期 14 个字段,看到 15\n')。

0.0;0.7;John;0.29
1.0;0.23;Mike;0.55
0.0;0.72;;Jane;;-3.4
0.0;0.98;Gil;0.68
0.0;0.48;;;0
1.0;0.34;Karl;0.73
0.0;0.44;James;0.06
1.0;0.4;Kiki;0.74
0.0;0.18;Albert;0.18
1.0;0.53;Mark;0.53

我使用 pandas、python 3.5.2 for windows 10 导入文件如下:

with open('E:\DATA\my_file.txt','rb') as f:
df = pd.read_csv(f, sep=';', encoding='CP1252', error_bad_lines=False) // skipping bad rows

df 看起来像这样://坏行现在似乎是空的

0.0;0.7;John;0.29
1.0;0.23;Mike;0.55

0.0;0.98;Gil;0.68

1.0;0.34;Karl;0.73
0.0;0.44;James;0.06
1.0;0.4;Kiki;0.74
0.0;0.18;Albert;0.18
1.0;0.53;Mark;0.53

然后我将表格导出到 csv 中,如下所示:

with open('E:\DATA\csv_file.csv','w',newline='\n') as outfile:
df.to_csv(outfile, sep=';',index = False, line_terminator = '\r')

csv_file.csv 看起来像这样://空行似乎已被删除

0.0;0.7;John;0.29
1.0;0.23;Mike;0.55
0.0;0.98;Gil;0.68
1.0;0.34;Karl;0.73
0.0;0.44;James;0.06
1.0;0.4;Kiki;0.74
0.0;0.18;Albert;0.18
1.0;0.53;Mark;0.53

不幸的是,当我使用以下代码将文件导入 postgres 时:

set client_encoding to 'WIN1252';
COPY my_table FROM 'E:\DATA\csv_file.csv' (DELIMITER(';'));

我收到以下错误:

ERROR:  literal newline found in data
HINT: Use "\n" to represent newline.
CONTEXT: COPY my_table, line 25408: ""

当我在 nopetad++ 中打开 csv_file 时,我看到它在每行的末尾都有“CR”,直到第 25407 行、第 25408 行和其他一些行的末尾都有“CRLF”。我尝试了一些我在这个网站上读到的东西,比如以二进制模式打开文件,但没有任何帮助。

谁能给我解释一下这是怎么回事,我该如何解决这个问题?谢谢

最佳答案

UPDATE2:它运行良好:

In [194]: pd.read_csv(r'D:\download\onetest.txt', sep=';')
Out[194]:
COL1 COL2 COL2.1 COL3 COL4 COL5 COL6 COL7 COL8 COL9 COL10
0 23 21.0 UP 15/08/1986 BOBO NaN 1071001 268-Z DON 1620 NaN
1 012R 65.0 UP 15/10/1986 ESTO NaN 15065108 066-B DON 8415 NaN
2 234 8.0 EIJFTERF 17/12/1989 KING NaN 15571508 0776-V UP 6329 NaN

更新:如果您的文件足够小以适合内存,您可以试试这个:

import io
data = []
with open(r'E:\DATA\my_file.txt') as f:
for line in f:
data.append(line.rstrip())
df = pd.read_csv(io.StringIO(data), sep=';', encoding='CP1252', error_bad_lines=False)
df.to_csv(r'E:\DATA\csv_file.csv', sep=';', index = False)

旧答案:

您正在使用 '\r' 作为换行符,而 PostgreSQL 的 COPY 命令需要 '\n',因此请尝试以下操作:

df = pd.read_csv(r'E:\DATA\my_file.txt', sep=';', encoding='CP1252', error_bad_lines=False)
df.to_csv(r'E:\DATA\csv_file.csv', sep=';', index = False)

在 PostgreSQL 中:

set client_encoding to 'WIN1252';
COPY my_table FROM 'E:\DATA\csv_file.csv' (DELIMITER(';'));

关于postgresql - 在用 pandas 导出到 csv 的数据中发现文字换行符/回车符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com