LINUX.ORG.RU

Пытаюсь написать первый скрипт на питон. Задаю глупые вопросы.

 ,


0

1

Привет всем.
Все вопросы буду писать в этой теме.
Вот мой шедевр:

!/usr/bin/python
stroka = "insert into dbabanktab values (seq_bankgeo.nextval,'402201','NA','USA','NA','NA','NA','NA','NA');"
country_3 = stroka[66:68]
print(country_3)
country_2 = stroka[82:84]
print(country_2)
print stroka.replace(country_2, country_3);
Вот его выхлоп:
US
NA
insert into dbabanktab values (seq_bankgeo.nextval,'402201','US','USA','US','US','US','US','US');
Проблема заключается в том, что он меняет все «NA» в строке. А мне нужно заменить только NA, который находится в [82:84]
Спасибо.

★★★★★

stroka

Обожесвятаямариямагдаленаиудаииосиф, что это за херня?!!

Deleted
()

у replace есть ещё и count, но он с ним тоже не получается =\

dada ★★★★★
() автор топика
Ответ на: комментарий от aol

к сожалению, в данном случае не получается решить задачу в sql.
решил подготовить «правильные» инсерты и впиндюрить.

dada ★★★★★
() автор топика
countries = ['402201','NA','USA','NA','NA','NA','NA','NA']
countries[3]='US'
req = "insert into dbabanktab values (seq_bankgeo.nextval, '"+ "', '".join(countries)+"');"
print req
insert into dbabanktab values (seq_bankgeo.nextval,'402201', 'NA', 'USA', 'US', 'NA', 'NA', 'NA', 'NA');
morse ★★★★★
()
Ответ на: комментарий от dada

http://www.dreamincode.net/forums/topic/194019-string-functions-replace-betwe...

У тебя странная задача. В твоем конкретном случае можно:

stroka[:82] + 'US' + stroka[84:]
Или как то так. Не помню я питоновские слайсы.

habamax ★★★
()
Последнее исправление: habamax (всего исправлений: 1)

К решениям в треде добавлю замечание, что строки в питоне неизменяемы. Т.е. тот replace, которые ты использовал в ТС не меняет строку в переменной stroka, он создает и возвращает новую строку. Если ты не присвоишь результат этого метода какой-нибудь переменной, ты его потеряешь, т.к. в stroka останется исходная строка.

anonymous
()
Ответ на: комментарий от powerguy

оцени пожалуйста степень быдлокодства.

#!/usr/bin/python
infile = open('inserts.sql')
for stroka in infile.readlines():
        country_3 = stroka[66:68]
        asd = stroka.split(",")
        asd[-3] = asd[-3].replace("NA", country_3)
        print(",".join(asd))
dada ★★★★★
() автор топика
Ответ на: оцени пожалуйста степень быдлокодства. от dada
#!/usr/bin/env python
with open("insert.sql", "r") as sql:
    for line in sql:
        country_3 = stroka[66:68]
        asd = stroka.split(",")
        asd[-3] = asd[-3].replace("NA", country_3)
        print(",".join(asd))

я бы сделал как-нибудь так. 1. избавься от [66:68], попробуй вытянуть эти данные из asd; 2. смени asd, stroka на читаемые имена; 3. если тебе точно нужно поменять элемент то ты можешь юзать asd[3] = country_3; 4. юзай для open второй параметр «r», ну или 0.RD_ONLY; 5. не юзай /usr/bin/python, юзай /usr/bin/env python; 6. файл надо закрывать через close(). в случае с with open blahblah as это делать не нужно.

powerguy ★★★
()
Ответ на: комментарий от powerguy

забыл перенос строк, извиняй. очень тороплюсь

powerguy ★★★
()
Ответ на: комментарий от powerguy

спасибо.

юзай для open второй параметр «r»

где-то прочитал, что он по дефолту с -r открывает.

dada ★★★★★
() автор топика
Ответ на: комментарий от powerguy

И нужно удостовериться, что в исходном файле нет строк, с запятыми в «странах».

insert into dbabanktab values (seq_bankgeo.nextval,'402201', 'NA', 'USA', 'US', 'NA', 'NA', 'RU,US', 'NA');
habamax ★★★
()
Ответ на: комментарий от powerguy

У меня проблема.
в исходном файле 46075 строк.
после обработки, строк становится 20420.
в какую сторону копать ?

dada ★★★★★
() автор топика
Ответ на: комментарий от powerguy
#!/usr/bin/python
infile = open('inserts.sql')
for stroka in infile.readlines():
        country_3 = stroka[66:68]
        asd = stroka.split(",")
        asd[-2] = asd[-2].replace("NA", country_3)
        print(",".join(asd))

запускаю так: ./script.py > outfile

dada ★★★★★
() автор топика
Ответ на: комментарий от dada
#!/usr/bin/env python
infile = open('inserts.sql', "r")
outfile = open('outfile.sql', "w+")
for stroka in infile.readlines():
    country_3 = stroka[66:68]
    asd = stroka.split(",")
    asd[-2] = asd[-2].replace("NA", country_3)
    outfile.write(",".join(asd))

?

powerguy ★★★
()
Ответ на: комментарий от powerguy

ясно. потыкаю. отпишусь.

dada ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.