Nano Hash - криптовалюты, майнинг, программирование

Чтение только определенной части текстового файла и вывод их в разные текстовые файлы

У меня есть большой текстовый файл, который содержит что-то из следующего:

158 lines of Text
2000 lines of Data
140 lines of Text
2000 lines of Data
140  lines of Text
.
.
.

Всего имеется 5 наборов из 2000 строк данных, которые я хотел бы, чтобы python читал и записывал в 5 разных текстовых файлов. Что-то вроде этого:

Data1.txt
Data2.txt
Data3.txt
.
.

Просматривая в Интернете, я нашел следующее: чтение разделов из большого текстовый файл в Python эффективно

def get_block(beg,end):
   output=open("Output.txt",'a')
   with open("input.txt",'r') as f:
      for line in f:
         line=line.strip("\r\n")
         line=line.split("\t")
         position=str(line[0])
         if int(position)<=beg:
            pass
         elif int(position)>=end:
            break
         else:
            for i in line:
               output.write(("%s\t")%(i))
            output.write("\n")

Какая проблема похожа на мою, однако в этой функции я получаю следующую ошибку:

File "/Users/aperego/Desktop/HexaPaper/DataToPlot/ReadThermo.py", line 8, in get_block
    if int(position)<=beg:

ValueError: invalid literal for int() with base 10: 'LAMMPS (5 Jun 2019)' 

Я считаю, что это связано с тем, что в моем входном текстовом файле много строк текста между набором данных. Кроме того, он принимает только один интервал строк, в то время как я бы хотел, чтобы мой скрипт запускался и извлекал все строки, содержащие данные, одновременно.

Я не знаю, является ли изменение этого сценария лучшим способом решить эту проблему или есть лучший способ достичь желаемой цели. Любая помощь приветствуется!


  • ValueError: неверный литерал для int() с основанием 10: в какой строке кода? 01.08.2019
  • Привет, я не уверен, что понимаю, что вы пытаетесь сделать, не могли бы вы рассказать немного подробнее, пожалуйста? Спасибо. 01.08.2019
  • ошибка означает, что вы пытаетесь преобразовать пустую строку int("") . Проверка print(position) перед int(position) 01.08.2019
  • @LuísFlávioFerranteMarcos У меня есть большой текстовый файл, в котором мои данные разделены строками текста, я пытаюсь заставить python пройтись по файлу, выбрать различные интервалы данных, которые мне нужны, и записать их в новый текстовый файл. 01.08.2019
  • @ElisByberi Я изменил запись, чтобы вы могли увидеть полную ошибку 01.08.2019
  • поэтому ваша ошибка показывает, что вы пытаетесь преобразовать в целое число int("LAMMPS (5 Jun 2019)"). Таким образом, проблема заключается в тексте в файле, который не соответствует вашим ожиданиям. 02.08.2019
  • если вы знаете, сколько строк вам нужно прочитать, используйте - т.е. for _ in range(158) для чтения первых 158 строк. А позже for _ in range(2000) прочитать 2000 строк данных. 02.08.2019

Ответы:


1

Если вы знаете, сколько строк пропустить и сколько прочитать, используйте цикл for с next() для пропуска строк и readline() для чтения строк.

# fin - file input
# fout - file output

fin = open('input.txt')

# skip 158 lines
for _ in range(158):
    next(fin)

# write 2000 lines    
with open('Data1.txt', 'w') as fout:
    for _ in range(2000):
        fout.write(fin.readline())

# skip 140 lines
for _ in range(140):
    next(fin)

# write 2000 lines    
with open('Data2.txt', 'w') as fout:
    for _ in range(2000):
        fout.write(fin.readline())

# ... rest ...

fin.close()

Вы также можете уменьшить его до

fin = open('test.txt')

# skip 158 lines
for _ in range(158):
    next(fin)

# write 2000 lines    
with open('Data1.txt', 'w') as fout:
    for _ in range(2000):
        fout.write(fin.readline())

# --- the same number of lines to skip

for x in range(2, 5):    
    filename = 'Data{}.txt'.format(x)

    # skip 140 lines
    for _ in range(140):
        next(fin)

    # write 2000 lines
    with open(filename, 'w') as fout:
        for _ in range(2000):
            fout.write(fin.readline())

fin.close()
01.08.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..