在 Python 中编写固定宽度、空格分隔的 CSV 输出

2023-11-25

我想使用 Python 的 csv writer 编写一个固定宽度、空格分隔和最少引用的 CSV 文件。 输出示例:

item1           item2  
"next item1"    "next item2"
anotheritem1    anotheritem2  

If I use

writer.writerow( ("{0:15s}".format(item1), "{0:15s}".format(item2)) )
...

然后,使用空格分隔符,格式会被破坏,因为由于项目格式的尾随空格而添加了引号或转义符(取决于 csv.QUOTE_* 常量):

"item1          " "item2          "
"next item1     " "next item2     "
"anotheritem1   " "anotheritem2   "

当然,我可以自己格式化所有内容:

writer.writerow((“{0:15s}{1:15s}”.format(item1, item2)) )

但使用 csv writer 就没有多大意义了。另外,当空格嵌入到项目中并且应该使用引用/转义时,我必须手动整理这些情况。换句话说,我似乎需要一个(不存在的)“QUOTE_ABSOLUTELYMINIMAL”csv 常量,它将充当“QUOTE_MINIMAL”常量,但也会忽略尾随空格。

有没有办法实现“QUOTE_ABSOLUTELYMINIMAL”行为,或者使用Python的CSV模块获得固定宽度、空格分隔的CSV输出?

我希望 CSV 文件具有固定宽度功能的原因是为了更好的可读性。因此,它将被处理为 CSV 以便读取和写入,但由于列结构而具有更好的可读性。读取不是问题,因为 csvskipinitialspace 选项会忽略额外的空格。令我惊讶的是,写作似乎是一个问题......

编辑:我的结论是使用当前的 csv 插件不可能实现。它不是一个内置选项,我看不到任何合理的方法来手动实现它,因为似乎没有办法通过Python的csv编写器编写额外的分隔符而不引用或转义它们。因此,我可能必须编写自己的 csv writer。


您遇到的基本问题是 csv 和固定格式基本上是相反的数据存储视图。让它们一起工作并不是常见的做法。另外,如果您只对带有空格的项目使用引号,则会破坏这些行的对齐方式:

testing     "rather hmm "
strange     "ways to    "
"store some " "csv data   "
testing     testing    

读回该数据也会导致错误的结果:

'testing' 'rather hmm '
'strange' 'ways to    '
'store some ' 'csv data   '
'testing' 'testing' ''

请注意最后一行末尾的额外字段。考虑到这些问题,我会用你的例子

"item1          " "item2          "
"next item1     " "next item2     "
"anotheritem1   " "anotheritem2   "

我发现它非常可读,很容易使用现有的 csv 库生成,并且在读回时可以正确解析。这是我用来生成它的代码:

import csv

class SpaceCsv(csv.Dialect):
    "csv format for exporting tables"
    delimiter = None
    doublequote = True
    escapechar = None
    lineterminator = '\n'
    quotechar = '"'
    skipinitialspace = True
    quoting = csv.QUOTE_MINIMAL
csv.register_dialect('space', SpaceCsv)

data = (
        ('testing    ', 'rather hmm '),
        ('strange    ', 'ways to    '),
        ('store some ', 'csv data   '),
        ('testing    ', 'testing    '),

temp = open(r'c:\tmp\fixed.csv', 'w')
writer = csv.writer(temp, dialect='space')
for row in data:
    writer.writerow(row)
temp.close()

当然,您需要将所有数据填充到相同的长度,无论是在执行所有这些操作的函数之前,还是在函数本身中。哦,如果你有数字数据,你还必须为此留出填充余量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中编写固定宽度、空格分隔的 CSV 输出 的相关文章

  • 有没有一种方法可以将python对象直接存储在mongoDB中而不需要序列化它们

    我在某处读到过 您可以使用 BSON 将 python 对象 更具体地说是字典 作为二进制文件存储在 MongoDB 中 但是现在我找不到任何与此相关的文档 有人知道具体如何做到这一点吗 没有办法在不序列化的情况下将对象存储在文件 数据库
  • 上传时的 Google Drive API——这些额外的空行从何而来?

    总结一下该程序 我从我的 Google 云端硬盘下载一个文件 然后在本地计算机中打开并读取一个文件 file a txt 然后在我的计算机中打开另一个文件 file b txt 处于附加模式 并且在使用这个新的 file b 更新我的 Go
  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • NumPy linalg.eig

    我有这个烦人的问题 但我还没有弄清楚 我有一个矩阵 我想找到特征向量 所以我写 val vec np linalg eig mymatrix 然后我得到了 vec 我的问题是 当我小组中的其他人对相同的矩阵 mymatrix 做同样的事情时
  • 从sklearn PCA获取特征值和向量

    如何获取 PCA 应用程序的特征值和特征向量 from sklearn decomposition import PCA clf PCA 0 98 whiten True converse 98 variance X train clf f
  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • “一旦获取切片就无法更新查询”。最佳实践?

    由于我的项目的性质 我发现自己不断地从查询集中取出切片 如下所示 Thread objects filter board requested board id order by updatedate 10 但这给我带来了实际对我选择的元素进
  • ImportError:运行 jupyter Notebook 时没有名为 IPython.paths 的模块?

    我通过以下方式安装了 jupyter usr local opt python bin python2 7 m pip install jupyter 这将安装 ipython 版本 4 1 2 但是 当我运行 jupyter Notebo
  • 小部件之间的自定义信号

    尝试将信号从一个 gtk EventBox 子级发送到另一个 在 init HeadMode 第 75 行 上出现错误 类型错误 未知信号名称 消息发送 why usr bin env python coding utf8 import p
  • 如何在Python中高效地添加稀疏矩阵

    我想知道如何在Python中有效地添加稀疏矩阵 我有一个程序 可以将大任务分解为子任务 并将它们分配到多个 CPU 上 每个子任务都会产生一个结果 一个 scipy 稀疏矩阵 格式为 lil matrix 稀疏矩阵尺寸为 100000x50
  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • 使用 Python 计算 Spark 中成对 (K,V) RDD 中每个 KEY 的平均值

    我想与 Python 共享这个特定的 Apache Spark 解决方案 因为它的文档非常贫乏 我想通过 KEY 计算 K V 对 存储在 Pairwise RDD 中 的平均值 示例数据如下所示 gt gt gt rdd1 take 10
  • 如何在 Django 中使用基于类的视图创建注册视图?

    当我开始使用 Django 时 我几乎使用 FBV 基于函数的视图 来处理所有事情 包括注册新用户 但当我更深入地研究项目时 我意识到基于类的视图通常更适合大型项目 因为它们更干净且可维护 但这并不是说 FBV 不是 无论如何 我将整个项目
  • 在 Spyder 的变量资源管理器中查看局部变量

    我是 python 新手 正在使用 Spyder 的 IDE 我欣赏它的一项功能是它的变量资源管理器 然而 根据一些研究 我发现它只显示全局变量 我找到的解决方法是使用检查模块 import inspect local vars def m
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • PIL - 需要抖动,但限制调色板会导致问题

    我是 Python 新手 正在尝试使用 PIL 来执行 Arduino 项目所需的解析任务 这个问题涉及到Image convert 方法以及调色板 抖动等选项 我有一些硬件能够一次仅显示 16 种颜色的图像 但它们可以指定为 RGB 三元
  • 附加两个具有相同列、不同顺序的数据框

    我有两个熊猫数据框 noclickDF DataFrame 0 123 321 0 1543 432 columns click id location clickDF DataFrame 1 123 421 1 1543 436 colu
  • 如何使用Python保存“完整的网页”而不仅仅是基本的html

    我正在使用以下代码来使用 Python 保存网页 import urllib import sys from bs4 import BeautifulSoup url http www vodafone de privat tarife r
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du

随机推荐

  • socket.io:客户端发出回调永远不会触发

    只是为了概念证明而摆弄 socket io 到目前为止一切都工作得很好 除了我无法让我的发出回调在客户端工作 我必须在这里遗漏一些愚蠢的东西 但文档目前还不是杀手 服务器很好地接收了 getSomeData 事件 没有任何错误 从我在客户端
  • 用数字键组合两个数组而不覆盖旧键

    我不想使用 array merge 因为它会导致 我误解了具有相同键的所有值都会被覆盖 我有两个数组 array1 array 0 gt foo 1 gt bar array2 array 0 gt bar 1 gt foo 并想将它们结合
  • 来自“FIRRemoteConfigValue!”不相关的类型“String”总是失败

    我的项目中有大约 50 个相同的警告 自从更新以来 我调用的所有函数snapshot value something as String正在失败 他们以前都工作过 我什至没有使用 RemoteConfig 功能 我只是想检索数据 我的用户类
  • JavaScript 标签的 src 属性是否会在所有浏览器中遵循 HTTP 重定向

    假设一个 javascript 标签的 src 属性指向一个重定向 where http foo com foo js是 301 重定向到https foo com foo js 所有浏览器都能成功加载JS文件吗 我注意到它似乎可以在 Ch
  • Spring JDBC BeanPropertyRowMapper yes no ('Y','N') 到布尔 bean 属性

    我有一个带有一些字符串 整数和布尔字段的类 我为他们声明了 getter 和 setter public class SomeClass private int id private String description private b
  • 由于 ,无法将 .Union 与 Linq 一起使用

    我有点被这个问题困扰了 希望我能得到一些帮助 这就是重点 我必须用该 SQL 请求填充我的 DataGridView SELECT LOT NumLot EtatLot NomEmploye FROM LOT JOIN AFFECTATIO
  • 如何优雅地关闭因关闭执行该应用程序的命令行而终止​​的 Java 应用程序?

    有一个已回答的问题优雅地关闭 Java 命令行程序的最佳方法 当程序被 Ctrl C 终止时 关闭挂钩会执行此任务 我的问题是如果在Java程序执行过程中命令行本身关闭了如何优雅退出 我用关闭挂钩进行了测试 但在这种情况下它不起作用 我无法
  • 用 jQuery 制作一个逃跑按钮

    我想创建一个带有简单按钮的页面 当用户尝试单击它时 该按钮会远离用户 我们可以称之为 逃跑 按钮吗 有没有一个简单的 jQuery 片段可以让我做同样的事情 问候 卡兰 米斯拉 button hover function this css
  • ios mapkit 通过点击地图关闭注释标注

    我有一个地图套件应用程序 可以在地图上放置注释 当您按下它们时 它会显示带有标题属性的标注 这工作正常 但用户无法关闭它们 它们保持打开状态 直到点击另一个注释 我不能让用户可以点击地图上的其他位置 或再次点击注释 来关闭它吗 我有一种感觉
  • Windows Powershell 中的 Unix tail 等效命令

    我必须查看大文件的最后几行 典型大小为 500MB 2GB 我正在寻找相当于 Unix 命令的命令tail对于 Windows Powershell 一些可用的替代方案是 http tailforwin32 sourceforge net
  • VB.NET 窗口屏幕截图 (ALT+PRINTSCREEN)

    我在某处找到了该代码 我发现它非常有用 但我想找到一种方法使其工作 以便它仅捕获给定的窗口目标 可能带有进程 ID 或窗口名称 即使该窗口未处于活动状态 我不想使该窗口处于活动状态 但想要获得屏幕截图 就像我在其上执行 Alt PrintS
  • TypeScript:根据字符串文字属性一般推断联合类型成员

    TypeScript v3 2 2 允许我定义接口的联合 每个接口都有一个唯一的字符串文字属性 可以用作类型保护 例如 type Device Laptop Desktop Phone interface Laptop type Lapto
  • 如果给定表达式*不*格式良好,“anti-SFINAE”将启用重载

    如果特定表达式的格式不正确 则可以轻松使用 SFINAE 隐藏特定函数重载 但我想做相反的事情 隐藏重载当且仅当给定表达式is格式良好 并且以非常通用的方式这样做 我有一个适用于 clang 3 5 0 和 gcc 5 2 0 的解决方案
  • 在 C++ 程序中以编程方式检测字节顺序

    是否有一种编程方法来检测您是否处于大端或小端架构上 我需要能够编写在 Intel 或PPC系统并使用完全相同的代码 即没有条件编译 我不喜欢基于类型双关的方法 它经常会被编译器警告 这正是工会的目的 bool is big endian v
  • 如何映射联合数组类型?

    我有以下结构 interface Test1 number number interface Test2 extends Test1 text string let test Test1 Test2 test map obj gt does
  • JavaScript 中的空白字符串是真还是假?

    这个表情 true回报false 意思是 是虚假的 然而if console log true else console log false 得到结果为真 现在我很困惑 空白字符串是真还是假 字符串 是一个 真实 值 以下是 假 值的列表
  • before_filter :require_owner

    我有许多资源 行程 时间表等 其操作应仅限于资源所有者 如何使用 ApplicationController 中定义的 require owner 方法来实现代码来实现此目的 理想情况下 代码将查找所有者的继承链 以便 before fil
  • 显示通知 DIV 时如何“调暗”网页的其余部分?

    在我的网络应用程序中 我显示了一个 通知 DIV 我想 调暗 页面的其余部分 以便通知 DIV 在显示时更加突出 有没有一种相当简单的方法可以做到这一点 这个问题只涉及视觉效果 而不涉及页面其余部分的功能 下面是我在网络其他地方找到的功能示
  • 更新 select2 数据而不重建控件

    我正在转换一个
  • 在 Python 中编写固定宽度、空格分隔的 CSV 输出

    我想使用 Python 的 csv writer 编写一个固定宽度 空格分隔和最少引用的 CSV 文件 输出示例 item1 item2 next item1 next item2 anotheritem1 anotheritem2 If