【问题标题】:How to .write() two items, a zero and an iterator in Python?如何在 Python 中 .write() 两个项目,一个零和一个迭代器?
【发布时间】:2015-09-04 19:35:06
【问题描述】:

我在这里可能有一个简单的格式问题 - 我想做一些类似 hrOut.write('0',i) 的事情,以便在 'i' 中添加/前缀一个零,这是一个时间戳,但我没有'不知道正确的语法。我的代码如下。谢谢大家。

hrIn = open('HrsInput.csv')
hrOut = open('HrsOutput.csv', 'wt')

for i in hrIn:
    if len(i) < 5:    
        hrOut.write('0', i)
    else:
        hrOut.write(i)

hrIn.close()
hrOut.close()

** 我最终发现填充技术有效。我可能被 excel 欺骗了,因为在记事本中出现了填充。

hrIn = open('HrsInput.csv')
hrOut = open('HrsOutput.csv', 'wt')

for i in hrIn:   
    hrOut.write("{}\n".format(i.rstrip().zfill(5)))

hrIn.close()
hrOut.close()

【问题讨论】:

    标签: python csv formatting conditional-statements writing


    【解决方案1】:

    使用str.format:

    hrOut.write('0{}'.format(i))
    

    或者去掉 if/else 和 pad:

    for i in hrIn:   
        hrOut.write("{}\n".format(i.rstrip().zfill(5)))
    

    zfill 只会为您的时间添加一个零,包含四个字符:

    In [21]: "12:33".zfill(5)
    Out[21]: '12:33'
    
    In [22]: "2:33".zfill(5)
    Out[22]: '02:33'
    

    【讨论】:

    • 谢谢,这消除了我的语法错误,但我可能还有另一个问题。我没有看到添加的零。我应该再解释一下——我的每小时时间戳有 X:XX 或 XX:XX。所以,XX:XX 已经是正确的,但我试图在 X:XX 前面添加一个零,使其成为 XX:XX。您的建议 sn-p 是这样做还是我没有正确处理?
    • 我不太确定输入是否为字符串形式。我正在查看 excel 中的输入列,它似乎没有定义格式。如果我定义为文本,我会丢失 X:XX 或 XX:XX 格式。如果我只是 .write(i) 我在输出文件中得到与输入文件相同的格式。
    • @AF2k15,如果字符串长度为四个字符,zfill 将添加前导零,您计算换行符吗?
    • 我用两种不同的代码编辑器尝试了这两种技术,并且每次都从我之前的尝试中删除了输出文件,以确保它不是覆盖问题。我不得不假设我的输入文件而不是代码有问题,所以我很感激你的信息。谢谢。
    • @AF2k15,不用担心,我添加了几个例子来证明它确实有效!
    【解决方案2】:

    只是一个建议。如何做如下的事情。

    (1) 在 ':' 上拆分时间戳。例如:

    "1:20".split(':')[:1]
    

    这将返回 1

    (2) 然后在 python 中使用 zfill 或 sprintf 等效项。类似的东西:

    "%02d" % (1,)
    
    or use zfill on the split string (1) like : 
    
    "1".zfill(3)
    

    【讨论】:

      猜你喜欢
      • 2021-10-05
      • 1970-01-01
      • 2023-03-17
      • 2020-10-11
      • 2014-10-16
      • 2011-09-01
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多