Область действия переменной: не удалось распечатать внутри цикла for - PullRequest
1 голос
/ 21 июня 2020
sys.stdin = io.StringIO("workmen,hdfs://localhost:54310/hadoop_test/text_files/file1.txt    1\n workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file1.txt   1\n workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file2.txt   1\n workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file4.txt   1\n workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file5.txt   1\n workno,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file3.txt    1\n works,hdfs://localhost:54310/hadoop_test/text_files/file1.txt   33\n works,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file1.txt    33\n works,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file2.txt    34")

for each_line in sys.stdin:

    each_line = each_line.strip()
    value,total_num_words = each_line.split('\t',1)

    print(value) #not returning anything the code just runs without error. 

У меня есть строка текста, которую я определил в sys.stdin. Я хотел бы прочитать каждую строку и извлечь слово (например, рабочие), имя файла (например, hdfs: // localhost: 54310 / hadoop_test / text_files / file1.txt) и счетчик (например, 1 для первого случая), однако, когда я хотите отладить и распечатать значение, которое ничего не возвращает на jupyter. Я предполагаю, что это проблема с переменной областью, или l oop не работает, чтобы вернуть вывод для «значения». Есть ли способ обойти это?

1 Ответ

1 голос
/ 21 июня 2020

У вас наверняка нет табуляторов. Следующее работает безупречно:

from io import StringIO

string = StringIO("""workmen,hdfs://localhost:54310/hadoop_test/text_files/file1.txt    1
 workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file1.txt   1
  workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file2.txt   1
   workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file4.txt   1
    workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file5.txt   1
     workno,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file3.txt    1
      works,hdfs://localhost:54310/hadoop_test/text_files/file1.txt   33
       works,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file1.txt    33
        works,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file2.txt    34""")

for each_line in string:
    each_line = each_line.strip()
    value, total_num_words = each_line.split()

    print(value)  # not returning anything the code just runs without error.

Это дает

workmen,hdfs://localhost:54310/hadoop_test/text_files/file1.txt
workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file1.txt
workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file2.txt
workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file4.txt
workmen,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file5.txt
workno,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file3.txt
works,hdfs://localhost:54310/hadoop_test/text_files/file1.txt
works,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file1.txt
works,hdfs://localhost:54310/hadoop_test/text_files/lab_exercise6_file2.txt
...