Я новый пользователь Python. Я получил, чтобы узнать, как изменить значение параметра в одном файле. Сценарий:

#####test.py##########
from sys import argv
script,filename,sigma = argv
file_data = open(filename,'r')
txt = file_data.read()
txt=txt.replace('3.7',sigma)
file_data = open(filename,'w')
file_data.write(txt)
file_data.close()

Он запускается в командной строке с test.txt как

test.py test.txt 2. 

3.7 заменяется на 2 в test.txt, в результате.

Теперь, если я хочу сделать то же самое для всех файлов .txt в каталоге, например.

test.py *.txt 2

Какие предлагаются модификации?

Ваши предложения высоко ценятся.

Хафиз .

0
Hafiz 24 Апр 2017 в 07:54

2 ответа

Лучший ответ

Bash (или ваша оболочка) раскроет *.txt (до test0.txt test1.txt ... или как там называются файлы *.txt в вашем текущем каталоге), прежде чем передать его в ваш скрипт на python. поэтому ваш скрипт на python получит много аргументов (а не только 2, как вы ожидаете). напечатайте sys.argv для проверки.

Вы можете решить это в самом Bash с чем-то вроде

for name in *.txt; do test.py ${name} 2; done

В противном случае вам придется по-разному относиться к sys.argv в python и учитывать более 2 аргументов.

0
hiro protagonist 24 Апр 2017 в 05:31

Импорт glob решил эту проблему. Но у меня есть несколько вопросов.

Запрос 1:

Я переписываю свой код как:

#####test.py##########
from sys import argv
script,filename,sigma = argv
file_data = open(filename,'r')
txt = file_data.read()
txt=txt.replace('3.7'|'3',sigma) #gives syntax error
file_data = open(filename,'w')
file_data.write(txt)
file_data.close()

Я хочу заменить 3,7 или 3 сигмой. Какой будет исправленный код?

Запрос 2 .

Я переписываю это следующим образом:

#####test.py##########
from sys import argv
script,filename,sigma = argv
file_data = open(filename,'r')
txt = file_data.read()
txt=txt.replace('x="2"','x=sigma')
file_data = open(filename,'w')
file_data.write(txt)
file_data.close()

С участием

py test.py test.txt 3.

Я получаю х = сигма, но я хочу, чтобы х = 3

Какая будет модификация?

С Уважением,

Хафиз

0
Hafiz 28 Апр 2017 в 17:52