Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 Django项目未写入文件_Python_Django - Fatal编程技术网

Python Django项目未写入文件

Python Django项目未写入文件,python,django,Python,Django,我试图在Django中附加一个文件,以进行字符串替换,但由于某些原因,它不会写入文件。我在阅读方面没有问题 views.py with open('/home/me/dev/Django/rulebase/result.rb', 'a') as discover_reading: mydiscover = File(discover_reading) for line in mydiscover: line.replace('input = "', 'this')

我试图在Django中附加一个文件,以进行字符串替换,但由于某些原因,它不会写入文件。我在阅读方面没有问题

views.py

with open('/home/me/dev/Django/rulebase/result.rb', 'a') as discover_reading:
    mydiscover = File(discover_reading)
    for line in mydiscover:
        line.replace('input = "', 'this')
    mydiscover.closed
我在浏览器上遇到此错误:

Exception Type:     IOError
Exception Value:    

File not open for reading

您必须使用“r”标志打开它,以便阅读

open('/home/me/dev/Django/rulebase/result.rb', 'r')

以下内容将替换文件的内容:

with open('/home/me/dev/Django/rulebase/result.rb', 'r') as discover_reading:
    lines = [line.replace('input = "', 'this') for line in discover_reading.readlines()]

with open('/home/me/dev/Django/rulebase/result.rb', 'w') as discover_reading:
    discover_reading.writelines(lines)
你的例子根本不起作用

请阅读和的文档
File
不是内置函数,
str.replace
不会就地替换(字符串是不可变的),而
mydiscover.closed
用于告知文件是否已关闭,而不是关闭打开的文件


引发原始错误的原因是,您正试图从使用
a
标志(表示追加)打开的文件中读取行。

嗯,
open(…,'a')
打开是为了写入(追加),而不是读取。但是,您的代码没有多大意义。您试图实现的具体目标是什么?您是否试图将文件内容复制到另一个文件
mydiscover
替换部分内容?我希望代码打开文件搜索字符串,然后替换文件中的字符串。您可以替换字节序列,但不能更改替换序列的长度。改为写一个新文件。谢谢你在结尾我想它做的是删除整行添加,然后用“this”替换它。之后需要删除不需要的字符。当我运行脚本时,文件包含
input=“Default”
当我运行脚本时,它会给我
thisDefault”
@saiyan101是的,这就是
string.replace的行为(要替换,用替换)
。每次出现的
to_replace
都将替换为
replace_with
。如果要替换
input=“”
之后的内容,则需要使用正则表达式。