Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.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_Python 3.x_List_File - Fatal编程技术网

Python 删除文件开头和结尾的行,并将其余行写入新文件

Python 删除文件开头和结尾的行,并将其余行写入新文件,python,python-3.x,list,file,Python,Python 3.x,List,File,我正在尝试创建一个函数,从一个文件中复制行,从文件的“开始”中删除第一行忽略行,从“结束”中删除最后一行忽略行,然后将其余行写入新文件 这就是我尝试过的: def truncate_file(file1, file2): # file1 = "omit_lines_test.txt" # Just for testing # file2 = "truncated_file.txt" # Just for testing infile = open(file1, "

我正在尝试创建一个函数,从一个文件中复制行,从文件的“开始”中删除第一行
忽略行,从“结束”中删除最后一行
忽略行,然后将其余行写入新文件

这就是我尝试过的:

def truncate_file(file1, file2):
#    file1 = "omit_lines_test.txt"    # Just for testing
#    file2 = "truncated_file.txt"    # Just for testing
    infile = open(file1, "r")
    outfile = open(file2, "w")

    print("\n*** Truncating file copy ***\n")
    omit_from_start = int(input("Omit how many lines from the start: "))
    omit_from_end = int(input("Omit how many lines from the end: "))

    lines_to_output = []

    lines = [line for line in infile]
    lines_to_output.append(str(lines[omit_from_start:omit_from_end]))

    for line in lines_to_output:
        for character in line:
            outfile.write(character)

    infile.close()
    outfile.close()
我的
infle
只是一个文本文件,包含
['1\n','2\n','3\n','4\n','5\n','6\n','7\n','8\n','9\n','10\n']
,我需要
outfile
包含
['4\n','5\n','6\n','7\n','8\n']


目前,
行到输出
只包含
['[]]
。我也尝试过使用.join()和.pop()方法,但它们也不能产生我想要的结果。

这种方法确实会对内嵌进行额外扫描以查找行数,但它的好处是在复制过程中不必将整个内嵌保存在内存中。因此,对于较小的文件,它可能比最初的方法慢,但允许该方法处理非常大的文件

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

def truncate_file(file1, file2):
    infile = open(file1, "r")
    outfile = open(file2, "w")

    print("\n*** Truncating file copy ***\n")
    omit_from_start = int(input("Omit how many lines from the start: "))
    omit_from_end = int(input("Omit how many lines from the end: "))

    length = file_length(file1)

    # This iteration prevents whole file being stored in memory
    for i, line in enumerate(infile):
        if i < omit_from_start:
            continue;
        elif i < length - omit_from_end:
            outfile.write(line)
        elif
           break

    infile.close()
    outfile.close()
def文件(fname):
将open(fname)作为f:
对于枚举(f)中的i,l:
通过
返回i+1
def truncate_文件(文件1、文件2):
填充=打开(文件1,“r”)
输出文件=打开(文件2,“w”)
打印(“\n***截断文件副本***\n”)
忽略从开始到结束的行数=int(输入(“忽略从开始到结束的行数:”)
省略_from_end=int(输入(“省略末尾的行数:”)
长度=文件长度(文件1)
#此迭代可防止整个文件存储在内存中
对于i,枚举中的行(填充):
如果我<从\u开始忽略\u:
继续;
elif i<长度-从_端省略_:
输出文件。写入(行)
否则如果
打破
infle.close()
outfile.close()
实际上没有运行代码,因此可能存在一些边界错误,但方法是扫描内嵌以查找文件的长度,然后再次迭代内联文件,忽略起始行,然后在达到长度时中断迭代-从结束字符串忽略


没有进行任何输入验证以确认从\u开始的省略\u介于零和小于长度减去从\u结束的省略\u之间,或者从\u结束的省略\u小于长度-从\u开始的省略\u

@eyllanesc:您链接的问题涉及搜索每行以查找特定字符串。我只是想省略行的范围。如您所见,我已尝试对
行进行切片
列表。您可能需要
行[从\u开始省略\u:-从\u结束省略\u]
行[从\u开始省略\u:len(行)-从\u结束省略\u]
(取决于您希望为0执行的操作)。此外,由于您是通过将整个文件读入行列表来执行此操作的,并将行列表输出到另一个文件,文件部分不相关。关于如何从列表的开头和结尾删除元素的任何答案都将对您有所帮助。这是一个更容易的问题(你已经写了最难的部分)。