Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 输出文件中每行的字符限制_Python_Word_Limit - Fatal编程技术网

Python 输出文件中每行的字符限制

Python 输出文件中每行的字符限制,python,word,limit,Python,Word,Limit,因此,我的目标是尝试将输出文件中的字符限制为每行6个字符。 这是我到目前为止所做的,但这不起作用:我得到的一个错误是无法连接str和int def charLimit(outputfile): limit =6 char = 0 with open(outputFile,'r+') as file: for char in char.len(): if char != 6 :

因此,我的目标是尝试将输出文件中的字符限制为每行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
您可以使用以下模块:


<>注释:它不在单词中间分割文本。

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

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

123456789
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)
错误消息(“无法连接字符串和int”)来自
read()
方法返回字符串这一事实。因此,在下一行中将
1
添加到
char
时,您试图使用
+
运算符将字符串与int组合,这是不可能的

如果要以数字方式添加
1
,请使用内置的
int()
方法,例如

char = int(char) + 1
如果要将
1
添加为字符串,请使用

char += '1'

要在不考虑单词边界的情况下获得每行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
,然后逐行读取(惰性地)文件,剥离换行符并将行链接到单个字符流中,然后使用grouper配方写入每行
限制
字符,最后关闭文件并删除备份


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

对于char.len()中的char()
您在这里想做什么
char
不应该有
len()
方法,即使它有,也不会返回iterable。如何将tmp.tmp复制到同一输出文件中,或者需要复制到单独的文件中?