2013-12-10 3 views
2

В стандартном вводе, я обеспечиваю следующий файл:питона заменить слово в соответствии с условием

#123  595739778  "neutral"  Won the match #getin 
    #164  595730008  "neutral"  Good girl 

данные # 2 выглядит следующим образом:

labels 1 0 -1 
    -1 0.272653 0.139626 0.587721 
    1 0.0977782 0.0748234 0.827398 

Я хочу увидеть, если его -1 в данные файла # 2 затем заменить отрицательным, то 1 положительный и 0, то нейтральный

Ниже приведены мои вопросы:

  1. начало в данных # 2 файл на 2-й строке
  2. Я столкнулся с проблемой замены. Я хочу заменить, как показано ниже, но показывая ошибку, и он ожидает еще один аргумент, но у меня уже есть 2 аргумента.
  3. Если я делаю, что-то, как показано ниже (обратите внимание на оператор печати):

    if binary == "-1": 
        senti = str.replace(senti.strip('"'),"negative") 
    elif binary == "1": 
        senti = str.replace(senti.strip('"'),"positive") 
    elif binary == "0": 
        senti = str.replace(senti.strip('"'),"neutral") 
    print id, "\t", num, "\t", senti, "\t", sent 
    

    , но если я (уведомление печати), то он не идет в «если условия»:

    if binary == "-1": 
        senti = str.replace(senti.strip('"'),"negative") 
    elif binary == "1": 
        senti = str.replace(senti.strip('"'),"positive") 
    elif binary == "0": 
        senti = str.replace(senti.strip('"'),"neutral") 
    

    печати ID, "\ т", Num, "\ т", SENTI, "\ т", посланный

Как напечатать то. выход, который я получил: # 123 595739778 "нейтральный" выиграл матч #getin # 164 595730008 "нейтральный" Хорошая девочка

output expected (replace just replaces the negative, positive & neutral as per data# file: 

    #123  595739778  negative  Won the match #getin 
    #164  595730008  positive  Good girl 

Ошибка:

Traceback (most recent call last): 
    File "./combine.py", line 17, in <module> 
    senti = str.replace(senti.strip('"'),"negative") 
TypeError: replace() takes at least 2 arguments (1 given) 

Вот мой код:

for line in sys.stdin: 
    (id,num,senti,sent) = re.split("\t+",line.strip()) 
    tweet = re.split("\s+", sent.strip().lower()) 
    f = open("data#2.txt","r") 
    for line1 in f: 
     (binary,rest,rest1,test2) = re.split("\s", line1.strip()) 
     if binary == "-1": 
      senti = str.replace(senti.strip('"'),"negative") 
     elif binary == "1": 
      senti = str.replace(senti.strip('"'),"positive") 
     elif binary == "0": 
      senti = str.replace(senti.strip('"'),"neutral") 
     print id, "\t", num, "\t", senti, "\t", sent 
+0

Можете ли вы разместить сообщение об ошибке, которую вы получаете? – qmorgan

+0

@qmorgan проверить мое редактирование – fscore

ответ

3

У вас на самом деле отсутствует аргумент для замены; так как это метод самой строки, вы могли бы сделать что-либо:

In [72]: str.replace('one','o','1') 
Out[72]: '1ne' 

или

In [73]: 'one'.replace('o','1') 
Out[73]: '1ne' 

В вашем коде, вы, вероятно, хотите, например,

if binary == "-1": 
     senti = senti.strip('"').replace("-1","negative") 

Чтобы пропустить первую строку файла данных # 2, один вариант

f = open("data#2.txt","r") 
for line1 in f.readlines()[1:]: # skip the first line 
    #rest of your code here 

Edit: После чата, что я думаю, что вы хотите, это больше похоже на следующее:

f = open("data#2.txt","r") 
datalines = f.readlines()[1:] 

count = 0 

for line in sys.stdin: 
    if count == len(datalines): break # kill the loop if we've reached the end 
    (tweetid,num,senti,tweets) = re.split("\t+",line.strip()) 
    tweet = re.split("\s+", tweets.strip().lower()) 
    # grab the right index from our list 
    (binary,rest,rest1,test2) = re.split("\s", datalines[count].strip()) 
    if binary == "-1": 
     sentiment = "negative" 
    elif binary == "1": 
     sentiment = "positive" 
    elif binary == "0": 
     sentiment = "neutral" 
    print tweetid, "\t", num, "\t", sentiment, "\t", tweets 
    count += 1 # add to our counter 
+0

привет, это сработало, но проверьте # 3 в моем редактировании в вопросе – fscore

+0

Я не могу понять, что вы пытаетесь сказать здесь. Вы можете перефразировать? – qmorgan

+0

проверить мои править пожалуйста – fscore

Смежные вопросы