【问题标题】:How to write a text file with no any delimiter in python?如何在python中编写没有任何分隔符的文本文件?
【发布时间】:2014-01-16 21:39:19
【问题描述】:

我希望在 Python 2.7 中编写一个 6 行的简单文本文件。 我正在使用此代码:

import csv
export=open('./images2/test.tfw', "wb")
writer=csv.writer(export, delimiter=' ', quoting=csv.QUOTE_NONE)
writer.writerow('0.06')
writer.writerow('0.00')
writer.writerow('0.00')
writer.writerow('-0.06')
writer.writerow('-10.59')
writer.writerow('38.49')
export.close()

我正在进入文件:

0 . 0 6
0 . 0 0
0 . 0 0
- 0 . 0 6
- 1 0 . 5 9
3 8 . 4 9

但我不希望数字中有空格或其他任何内容,我只需要这个:

0.06
0.00
0.00
-0.06
-10.59
38.49

但是当我尝试delimiter=''delimiter=None 时,我收到错误“必须设置分隔符”。 如何在没有分隔符的情况下编写我的数字?也许这是一个非常基本的问题,但我在谷歌中找不到。谢谢!

【问题讨论】:

  • 如果不分隔,为什么需要 csv writer?
  • 我只知道这种写文本文件的方法……也许我需要寻找更好的方法。
  • export.write('text\n')

标签: python python-2.7 delimiter


【解决方案1】:

writerow 需要一个可迭代对象,其中的每个元素都将写入文件,由分隔符分隔。因此,当您给它一个字符串(它本身是一个可迭代的)时,它会将每个字符写入文件,并由分隔符分隔。
您想要做的是将“行”作为字符串列表提供。在您的情况下,每一行只有一个字符串,因此将每一行作为只有一个字符串的列表提供。

CSV 格式需要某种分隔符。传统上,此分隔符是逗号 - 因此名称(CSV = 逗号分隔值)。但是,如果您觉得需要使用不同的分隔符,您当然可以这样做(典型的选择包括空格、制表符、连字符等)

import csv
export=open('./images2/test.tfw', "wb")
writer=csv.writer(export, delimiter=',', quoting=csv.QUOTE_NONE)
writer.writerow(['0.06'])
writer.writerow(['0.00'])
writer.writerow(['0.00'])
writer.writerow(['-0.06'])
writer.writerow(['-10.59'])
writer.writerow(['38.49'])
export.close()

【讨论】:

  • 对此进行扩展,'0.06' 是一个字符串,它是一个字符串序列。因此,每个项目之间都写有分隔符。通过将字符串 '0.06' 包裹在括号 [] 中,您可以创建一个包含单个字符串的列表,以便打印整个字符串。
  • 创建 list 对象只是为了使用 CSV 模块,这掩盖了 CSV 模块不适合这项工作的事实;类似于将大锤包裹在气泡膜中以避免破坏您正在开裂的螺母。
  • 是的。我认为 OP 有一个我不知道的使用 CSV 的理由。直到后来 OP 编辑​​到他的帖子中,这是他知道写入文件的唯一方法。当然,到那时,已经有人建议了fp.write(...);所以我不想再提这个了
【解决方案2】:

正如 cmets 中所说,您甚至不需要使用 csv 模块。一个更简单的解决方案:

with open('./images2/test.tfw', 'w') as export:
    export.write('0.06\n')
    export.write('0.00\n')
    export.write('0.00\n')
    export.write('-0.06\n')
    export.write('-10.59\n')
    export.write('38.49')

【讨论】:

    【解决方案3】:

    “没有分隔符”,你说?除了新线,我想。这只是writing lines of text in Python...

    data = (0.06, 0.00, 0.00, -0.06, -10.59, 38.49,)
    with open('./images2/test.tfw', 'w') as export:
        for line in data:
            export.write('{}\n'.format(line))
    

    【讨论】:

    • 谢谢,它也很好,很短。
    【解决方案4】:
    import csv
    export=open('./images2/test.tfw', "wb")
    writer=csv.writer(export, delimiter='', quoting=csv.QUOTE_NONE)
    writer.writerow(['0.06'])
    writer.writerow(['0.00'])
    writer.writerow(['0.00'])
    writer.writerow(['-0.06'])
    writer.writerow(['-10.59'])
    writer.writerow(['38.49'])
    export.close()
    

    我对 csvwriter 的工作并不多,但是如上所述在引号之间不提供任何内容,或者没有引号的 NUL 可能会起作用?这是考虑到您希望在 CSV 中使用 0 分隔符。

    如果您只想编写文本,以下内容可能适合您的目的。如果您不想使用 CSV 分隔符,则无需 csvwriter。

    a = open('./images2/test.tfw', "w")
    a.write('0.06\n')
    a.write'0.00\n')
    a.write('0.00\n')
    a.write('-0.06\n')
    a.write('-10.59\n')
    a.write('38.49\n')
    a.close()
    

    【讨论】:

    • 谢谢,第二种方法有效,但第一种方法(正如我在问题中所说)给了我错误“必须设置分隔符”。
    【解决方案5】:

    你可以这样做来解决字符串是序列的问题:

    import csv
    
    def write_string(writer, s):
        return writer.writerow((s,))
    
    with open('test.tfw', "wb") as export:
        writer = csv.writer(export, quoting=csv.QUOTE_NONE)
        write_string(writer, '0.06')
        write_string(writer, '0.00')
        write_string(writer, '0.00')
        write_string(writer, '-0.06')
        write_string(writer, '-10.59')
        write_string(writer, '38.49')
    

    【讨论】:

      猜你喜欢
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多