如何在命令行中将参数传递给文件,并使用python更改文件中的字符串?

如何在命令行中将参数传递给文件,并使用python更改文件中的字符串?,python,regex,file-io,command-line,arguments,Python,Regex,File Io,Command Line,Arguments,我有一个文件requirement.txt文件。以下文本如下。如何更改django和flask的值,并通过作为命令行参数传递来更新文件 requirement.txt numpy=1.14 pandas=1.4 django=1.6 flask=1.4 numpy=1.14 pandas=1.4 django=2.1 flask=2.0 下面是我的python文件.py import sys import re program_name = sys.argv[0]

我有一个文件requirement.txt文件。以下文本如下。如何更改django和flask的值,并通过作为命令行参数传递来更新文件

requirement.txt

 numpy=1.14
 pandas=1.4
 django=1.6
 flask=1.4
 numpy=1.14
 pandas=1.4
 django=2.1 
 flask=2.0
下面是我的python文件.py

 import sys
 import re
 program_name = sys.argv[0]
 arguments = sys.argv[1:]
 print (arguments[0])
 print (arguments[1])
 with open('requirement.txt ', 'r') as fr:
     data = fr.readlines()
     with open('requirement.txt ', 'a') as fw:
     fw.write(....)
python file.py django=2.1 flask=2.0

requirement.txt的输出

 numpy=1.14
 pandas=1.4
 django=1.6
 flask=1.4
 numpy=1.14
 pandas=1.4
 django=2.1 
 flask=2.0

使用“a”表示您将有两个相同类型的需求,如下所示:

numpy=1.14
pandas=1.4
django=1.6
flask=1.4
django=2.1 
flask=2.0
相反,您应该用更新的需求列表覆盖该文件

首先,加载数据并将其放入字典:

fr=open('requirement.txt ', 'r')
L=fr.read().split("\n") #Better than .readlines(), since it removes '\n'
fr.close() #Very important, since you're going to write back into it.
D=dict()
for e in L:
    E=e.split("=")
    if len(E)<2:
        continue
    D[E[0]]=E[1]
D[arguments[0]]=arguments[1]
最后,将字典数据放回字符串并覆盖文件:

result="\n".join([e+"="+D[e] for e in D])
fw=open('requirement.txt ', 'a')
fw.write(result)
fw.close()
这将产生预期的结果


此外,如果您希望保留列表中的键的顺序,您应该跟踪它。

我想您可能想查看argparse:

否则,您可以这样做:

import sys

requirements = {}

# Save a list of requirements
with open('requirement.txt', 'r') as file:
  for line in file:
    line = line.strip("\n").split("=")
    requirements[line[0]] = line[1]

# Change requirements values
for command in sys.argv[1:]:
  command = command.split("=")
  requirements[command[0]] = command[1]

# Write requirements back to file
with open('requirement.txt', 'w') as file:
  for r, v in requirements.items():
    line = "{}={}\n".format(r, v)
    file.write(line)
使用方便的模块-一次编辑:

最终的
requirements.txt
文件内容:

numpy=1.14
pandas=1.4
django=2.1
flask=2.0

@Mak可能重复,请检查以将open('filename','w')作为fr在适当位置编辑文件:感谢它的工作技巧如何提高您的python技能。你能告诉我吗:)我试过了。我做不到。我想stackoverflow会有人帮忙的。您的代码也可以正常工作,您可以检查这一点吗?因为result=“\n”。join([e+”=“+D[e]表示D中的e])将引发错误,因为我们正在尝试将列表连接到str,因为D[arguments[0]不是列表str@Mous我发现错误。将
D[参数[0]]=参数替换为
D[参数[0]]]=参数[1]