【问题标题】:How to add special fomatting to first line in text document?如何在文本文档的第一行添加特殊格式?
【发布时间】:2014-09-03 03:47:54
【问题描述】:

我需要像这样格式化文本文档(注意列表中第一项中的引号):

Input
"C:/temp/image1.tif"
C:/temp/image2.tif
C:/temp/image3.tif

这是我目前所拥有的:

images = ['C:/temp/image1.tif', 'C:/temp/image2.tif', 'C:/temp/image3.tif']

out = 'C:/out'

inputs = open(os.path.join(out, "List.txt"), "w")
inputs.write("Input\n")

for i,img in enumerate(images):          
     inputs.write("{0}/{1}\n".format(ws, img))

inputs.close()

但是,这会产生以下内容,而第一项周围没有引号

Input
C:/temp/image1.tif
C:/temp/image2.tif
C:/temp/image3.tif

如何在文本文档的引号中获取列表中的第一项 (C:/temp/image1.tif)?

【问题讨论】:

  • 变量ws 未定义。

标签: python text quotes


【解决方案1】:

如果您将images 设为迭代器,则可以使用next 剥离第一项,然后像以前一样继续遍历images 中的其余项:

images = iter(['C:/temp/image1.tif', 'C:/temp/image2.tif', 'C:/temp/image3.tif'])

with open(os.path.join(out, "List.txt"), "w") as inputs:
    inputs.write("Input\n")
    inputs.write('"{0}"\n'.format(next(images)))
    for img in images:          
        inputs.write("{0}\n".format(img))

但是请注意,如果您将 images 设为迭代器(与原始代码不同),您将无法再次遍历 images,因为循环一次会消耗迭代器。

(我已将字符串格式{0}/{1} 更改为{0},因为原始格式会插入一个/,它不会出现在您想要的结果中。我还删除了对enumerate 的调用,因为i 没有在循环内使用。)


或者,如果您希望将images 保留为列表,您可以使用images[0] 来获取第一项,然后遍历images[1:] 来处理其余部分。

images = ['C:/temp/image1.tif', 'C:/temp/image2.tif', 'C:/temp/image3.tif']
out = 'C:/out'
with open(os.path.join(out, "List.txt"), "w") as inputs:
    inputs.write("Input\n")
    inputs.write('"{0}"\n'.format(images[0]))
    for img in images[1:]:          
        inputs.write("{0}\n".format(img))

顺便说一下,打开文件时通常最好使用with-statement。这样,当 Python 的执行流程离开 with 语句时(即使发生异常),文件句柄也会自动为您关闭。

【讨论】:

  • 太棒了,我很欣赏关于这个过程的深入讨论——这真的很有帮助,谢谢。
【解决方案2】:

您必须将第一行作为特殊情况处理,然后处理其余部分:

import os

images = ['C:/temp/image1.tif', 'C:/temp/image2.tif', 'C:/temp/image3.tif']
out = 'C:/out'

if not os.path.exists(out):
    os.makedirs(out)

with open(os.path.join(out, "List.txt"), "w") as inputs:
    inputs.write("Input\n")
    inputs.write('"{}"\n'.format(images[0]))
    for img in images[1:]:
        inputs.write('{}\n'.format(img))

【讨论】:

    【解决方案3】:

    在打印文本之前,你必须检查你在哪一行。

    images = ['C:/temp/image1.tif', 'C:/temp/image2.tif', 'C:/temp/image3.tif']
    
    out = 'C:/out'
    
    inputs = open(os.path.join(out, "List.txt"), "w")
    inputs.write("Input\n")
    
    for i,img in enumerate(images):
        if i != 0:          
           inputs.write("{0}/{1}\n".format(ws, img))
        else:
           inputs.write("\"{0}/{1}\"\n".format(ws, img))
    inputs.close()
    

    【讨论】:

    • 那不是问题,看我的回答。问题是它没有被另一组引号包围。
    【解决方案4】:

    您需要用另一组引号将您的文本括起来:

    images = ['C:/temp/image1.tif', 'C:/temp/image2.tif', 'C:/temp/image3.tif']
    
    out = 'C:/out'
    
    inputs = open(os.path.join(out, "List.txt"), "w")
    inputs.write("Input\n")
    
    for i,img in enumerate(images):
         if i == 0:
            inputs.write('"{1}"\n'.format(img))
         else:
            inputs.write('{1}\n'.format(img))
    
    inputs.close()
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      相关资源
      最近更新 更多