Unexpected EOF 意味着 bcp 读取器在期望更多数据时发现了 EOF。此 EOF 可以是:
(1) 实际的物理文件结尾(没有更多字节要读取)。这意味着您的数据格式错误。检查文件末尾附近是否有不完整的记录。
或者
(2) 在您所在的 Windows 上,以文本模式读取文件的程序尊重通过 MS-DOS 从 CP/M 继承的关于 Ctrl-Z(又名 ^Z aka \'x1A' aka SUB aka SUBSTITUTE)的古老约定从任何文件读取时的文件结束标记,而不仅仅是终端。这包括 Python——行为由 C 标准库决定。检查数据中的“\x1A”。
更新以清晰的方式回复评论:
在记事本++中,您可以通过查看/显示符号/显示所有字符使其显示不寻常的字符。您可以通过 Ctrl-F 进行搜索,在 Find What 框中键入 \x1a,然后在 Search 面板中选择 Extended 单选按钮。
或者你可以用一点 Python 得到第一个 Ctrl-Z 的行号:
bytes = open('bcp.dat', 'rb').read()
zpos = bytes.find('\x1a')
# if zpos is -1, no Ctrl-Z in file
print 1 + bytes[:zpos].count('\r\n')
创建 .dat 的位置无关紧要。无意的 Ctrl-Z 可能发生在任何操作系统上创建的文件中的任何位置。它是作为文本文件被读取的地方——Windows?砰!