相关疑难解决方法(0)

Python正在读取文件的末尾.这是安全隐患吗?

所以我只是注意到了这一点,经过一些实验,我设法让它变得可重复.我没有看到这张贴在任何地方.在某些情况下,Python似乎正在读取文件的末尾.

我正在使用Python 2.7.12

f = open('test', 'wb')
f.write('this is a test')
f.close()
Run Code Online (Sandbox Code Playgroud)

现在,"test"是一个14字节的文件,文本"这是一个测试".

f = open('test', 'rb+')
f.write('abcd')
x = f.read(1024*1024)
f.close()
Run Code Online (Sandbox Code Playgroud)

现在"test"是一个4110字节的文件,有这种内容http://i.imgur.com/rWgNWXy.png

这是一个错误吗?这是安全隐患吗?

python security buffer-overflow

10
推荐指数
0
解决办法
99
查看次数

从文件中读取后写回同一文件

我的目标是从文件中读取行,删除它末尾的空格并写回同一个文件.我试过以下代码:

with open(filename, 'r+') as f:
    for i in f:
        f.write(i.rstrip()+"\n")
Run Code Online (Sandbox Code Playgroud)

这似乎写在文件的末尾,保持文件中的初始数据不变.我知道使用f.seek(0)将指针返回到文件的开头,我假设这个解决方案需要某种方式.

你能否告诉我是否有不同的方法,或者我是否在正确的补丁上只需要在代码中添加更多逻辑?

python io file python-2.6

8
推荐指数
1
解决办法
8819
查看次数

在 Windows 中的 Python 文件上混合使用 read() 和 write()

似乎在 Windows 中使用(或)权限打开的文件上write()紧跟 a不会更新文件。read()r+r+b

假设testfile.txt当前目录中有一个文件,内容如下:

This is a test file.
Run Code Online (Sandbox Code Playgroud)

我执行以下代码:

with open("testfile.txt", "r+b") as fd:
    print fd.read(4)
    fd.write("----")
Run Code Online (Sandbox Code Playgroud)

我希望代码打印This并将文件内容更新为:

This----a test file.
Run Code Online (Sandbox Code Playgroud)

这至少在 Linux 上运行良好。但是,当我在 Windows 上运行它时,消息会正确显示,但文件没有改变 - 就像write()被忽略了一样。如果我调用tell()文件句柄,它会显示位置已更新(4在之前write()8之后),但文件没有更改。

但是,如果我fd.seek(4)在该write()行之前放置一个明确的内容,那么一切都会按我的预期进行。

有人知道 Windows 下这种行为的原因吗?

作为参考,我在带有 NTFS 分区的 Windows 7 上使用 Python 2.7.3。

编辑

在回应的意见,我都尝试r+brb+-的官方Python文档似乎意味着前者是规范的。

fd.flush()在不同的地方打电话,并在read()和之间放置一个write()这样的: …

python windows file-io

6
推荐指数
1
解决办法
2685
查看次数

删除巨大的csv中已知的确切行

我有一个~2亿行,7列csv文件.我需要删除行2636759.这个文件是7.7GB,超过内存容量.我对R最熟悉,但也可以在python或bash中做到这一点.

我无法在一次操作中读取或写入此文件.在磁盘上以增量方式构建此文件的最佳方法是什么,而不是尝试在内存中执行此操作?

我试图在SO上找到它,但只能找到如何使用足够小的文件来读取/写入内存,或者使用位于文件开头的行.

python csv r

6
推荐指数
1
解决办法
554
查看次数

无法打印文件

这是python(3.4)代码:

test = open('test.txt', 'r+')
test.truncate();
i = 0
stop = 99

while i <= stop:
    test.write("{:0>{}}|".format(i, len(str(stop))))
    i += 1

print(test.read())
Run Code Online (Sandbox Code Playgroud)

它写的文件很好,但由于某种原因它不会打印它.

test = open('test.txt', 'r+')

print(test.read())
Run Code Online (Sandbox Code Playgroud)

这按预期打印,所以我不知道问题出在哪里.

更新:

使用seek(0)解决了它.你可以链接一下它的解释吗?我在语言的文档中找不到它.

python printing windows-7 python-3.x

2
推荐指数
1
解决办法
754
查看次数