好的,这以前可能已经讨论过了,但是我无法在堆栈中的任何位置找到它,所以我在这里。
基本上,我正在编写一个脚本,该脚本将使用.txt文档并存储每隔一行(甚至说几行)并将其打印到新的文本文档中。
我能够成功地编写代码以扫描文本并删除偶数行并将其作为独立变量放入列表中,但是当我必须将列表的每一项添加到新的文本文档时,这取决于我这样做是得到第一行或最后一行,但不会超过一个。
这是我所拥有的
f = open('stuffs.txt', 'r')
i = 1
x = []
for line in f.readlines():
if i % 2 == 0:
x.append(line)
i += 1
我已经测试过,它成功地采用了正确的行并将其存储在列表x中
我尝试过
for m in x:
t = open('stuffs2.txt','w')
t.write(m)
紧随其后,并且仅打印最后一行
如果我愿意
for line in f.readlines():
if i % 2 == 0:
t = open('stuffs2.txt','w')
t.write(line)
i += 1
它将打印第一行
如果我尝试将第一个解决方案添加到for循环中作为嵌套的for循环,它也会打印第一行。我不知道为什么不将每个项目都放在.txt中 当我打印列表时,它应该在里面。
答案 0 :(得分:1)
没有找到规范的人-没有找到...
open('stuffs2.txt','w')
-“ w” ==杀死那里的内容并打开新的空文件...
阅读文档:reading-and-writing-files:
7.2。读写文件
open()
返回文件对象,最常与两个参数一起使用:open(filename, mode)
。f = open('workfile', 'w'
)第一个参数是包含文件名的字符串。
第二个参数是另一个字符串 包含一些字符,描述文件的处理方式 使用。
当仅读取文件时,
mode
可以为'r'
,仅'w'
写入(具有相同名称的现有文件将被删除),然后'a'
打开文件进行追加;写入文件的任何数据是 自动添加到末尾。'r+'
打开文件以供阅读 和写作。 mode参数是可选的;如果满足'r'
, 它被省略了。
更经济地写第二行:
with open("file.txt") as f, open("target.txt","w") as t:
write = True
for line in f:
if write:
t.write(line)
write = not write
这样,您无需将所有行存储在内存中。
with open(...) as name :
语法也更好-即使出现异常,它也会关闭文件句柄(您不会这样做)。