python-3.x - 从 CSV 编写器写入的文件中删除最后一行(和空白行)
问题描述
我有一个由 CSV Writer 编写的 CSV 文件。我需要删除文件末尾的一个空行。我似乎无法摆脱它,并且我的搜索结果被人们淹没在询问为什么每行数据之间有一个空白行(这当然可以通过添加newline=""
到文件打开语句来解决。
有没有办法干净地做到这一点?这是代码:
with open(r"file.csv", "w", newline="") as f:
csv_writer = writer(f, delimiter=";")
for i in range(5):
csv_writer.writerow([i, uniform(0,500)])
这是输出(实际上使最后一行为空不会出现在降价中,看起来:
0;479.9182863880229
1;397.35174552864135
2;390.33911360875913
3;243.78955947710557
4;171.04998742391697
<empty line here>
我不喜欢这个解决方案,这与对这个问题的回答是一样的:
lines = file.readlines()
lines = lines[:-1]
因为它需要我再次读取整个文件,并且我预计这个文件可能会增长到一个非常大的大小,并且这个特定的代码块最终可能会被多次执行。
解决方案
我终于找到了一个可行的解决方案,并且不需要再次读取整个文件:
with open(r"file.csv", "w", newline="") as f:
csv_writer = writer(f, delimiter=";")
for i in range(5):
csv_writer.writerow([i, uniform(0, 500)])
f.seek(0, os.SEEK_END)
f.seek(f.tell()-2, os.SEEK_SET)
f.truncate()
推荐阅读
- keycloak - 负载均衡器级别的 Keycloak 身份验证
- python - 当我在 Python3.7 上运行下拉列表程序时,Kivy 立即崩溃
- android - 如何设置 shadow-cljs 以使用 Cordova + Clojurescript 重新加载代码?
- powershell - 尝试从根证书创建子证书时,Powershell -Signer 命令不起作用
- angular - Angular 组件看不到同一文件中的接口
- c++ - 为什么 C++ 中 set::end 的迭代器取消对集合中元素数量的引用?
- python - 如何在内部使用多处理时通过 API 重新启动烧瓶服务器
- mysql - 计算一张表中的数据,其中表列 = 行号
- java - 如何使用 Docker-compose 在 Docker 上连接 Spring Boot 和 MySQL?
- angular - 向地图添加移动标记,带角度的 openlayers