1

所以我的目标是尝试将输出文件中的字符限制为每行 6 个字符。这是我到目前为止所拥有的,但这不起作用:我得到的错误之一是无法连接 str 和 int

def charLimit(outputfile):

        limit =6
        char = 0
        with open(outputFile,'r+') as file:
           for char in char.len():
               if char != 6 :
                  char = file.read(char)
                  char += 1
              else:
                  file.write('\n')
                  char = 0
4

4 回答 4

2

您可以使用textwrap模块:

import textwrap

with open(outputFile) as file:
     text = file.read()

with open(outputFile, 'w') as file:
     file.write(textwrap.fill(text, width=6))

注意:它不会在单词中间拆分文本。

于 2012-07-11T17:15:05.710 回答
0

您不能同时读取/写入同一个文件,因为您每 6 个字符插入换行符。这些换行符将覆盖文件中的下一个字符。假设文件的内容如下:

123456789

如果您只是在每 6 行之后向文件写入一个换行符,您的文件将如下所示:

123456
89

注意换行符是如何覆盖的"7"

如果您的文件相对较小(可能是几兆字节),您可以避免创建临时文件,只需将整个文件读入内存,将缓冲区位置设置回 0,然后覆盖它,如下所示:

with open(filename, 'r+') as f:
    raw = f.read()
    f.seek(0) #sets the buffer position back to the beginning of the file
    for i in xrange(0, len(raw), limit):
        line = raw[i:i+limit].rstrip('\n').replace('\n', ' ')
        f.write(line + '\n') 

但是,如果您的文件非常大,则不要将整个数据加载到内存中,而是写入临时文件,然后复制:

with open(filename, 'r') as infile, open('tmp.txt', 'w') as outfile:
    line = 
    while True:
        line = infile.read(limit)

        #if there is no more text to read from file, exit the loop
        if not line:
            break 

        outfile.write(line.rstrip('\n').replace('\n', ' ') + '\n')

import shutil

shutil.copyfile('tmp.txt', filename)
于 2012-07-11T17:17:32.387 回答
0

您的错误消息(“无法连接字符串和 int”)来自该read() 方法返回字符串的事实。因此,当您在下一行添加1char,您尝试使用+运算符将​​字符串与 int 组合,这是不可能的。

如果您想添加1数字,请使用内置int()方法,例如

char = int(char) + 1

如果您想将其添加1为字符串,请使用

char += '1'
于 2012-07-11T17:22:59.143 回答
0

要获得每行 6 个字符(不包括换行符本身)而忽略单词边界:

import fileinput
from itertools import chain, izip_longest

limit = 6
lines = (line.rstrip('\n') for line in fileinput.input([outputFile], inplace=1))
chars = chain.from_iterable(lines) # all characters
for chunk in izip_longest(*[chars]*limit, fillvalue=''): # grouper recipe*
    print(''.join(chunk)) # write to outputFile
fileinput.close() # close outputFile, delete backup

*石斑鱼食谱

该代码创建一个备份文件并将 stdout 重定向到outputFile,然后它逐行读取(懒惰)文件,剥离换行符并将这些行链接成单个字符流,然后limit使用 grouper 配方每行写入字符,最后关闭文件并删除备份。

这段代码不适合初学者(只是一个练习)。

于 2012-07-11T18:48:50.620 回答