2014-11-12 4 views
0

У меня есть txt-файл с идентификаторами и 34 числовыми значениями для каждого ID. Они представляют собой отдельные метки и 17 координат (x, y), указывающих геометрические ориентиры на цифровой фотографии для каждого идентификатора.записи строк в txt-файл python

Входной является TXT файл в этом формате:
ID1 x1 y1
ID1 х2 у2
ID1 х3 у3
ID1 x4 у4
.....
ID1 x17 Y17
ID2 x1 y1
ID2 x2 y2
.....
ID2 x17 Y17
и так далее ....

мне нужен выходной файл будет так:
ID1 x1 y1 x2 y2 x3 y3 x4 y4 ........ x17 Y17
ID2 x1 y1 x2 y2 x3 y3 ....... .... x17 y17

Я просто помещаю столбцы входного файла в списки, поэтому у меня есть список идентификаторов (str), список xs (str) и список ys (str).

for i in range(0, len(x), 17): 
    coord = '\t'.join([x[i+j] + '\t' + y[i+j] for j in range(16)]) 
    OutputFile.write(ID[i] + "\t" + coord) 

Однако мой выходной файл TXT выглядит следующим образом:
ID1 x1 y1
x2 y2
x3 y3
x4 y4
ID2 x1 y1
x2 y2
x3 y3
x4 y4

Итак, как я могу записать все координаты в одной строке? Я использую Python 3.4.0, и все мои данные являются типами str.

Благодаря

+0

непонятно, что вы пытаетесь достичь – Hackaholic

+0

Я переделал вопрос, надеюсь, теперь будет clearear :) –

+0

вы можете разместить простой ввод и вывод?это будет очень полезно, так как большинство из нас, вероятно, уже делали похожие вещи :) –

ответ

0

Я просто не могу воспроизвести результаты на Python 3.3. Обратите внимание, что добавление вашей строки не будет работать, если значения в x, y являются целыми числами, поэтому убедитесь, что они не являются \n -переработанные строки. Например, следующий ближе к коду и, кажется, что вы хотите:

n, nf = 2, 4 
x = [str(i) for i in range(n * nf)] 
y = [str(i*2) for i in range(n * nf)] 
ID = [str(10*i) for i in range(nf)] 
OutputFile = open('output2.txt', 'w') 
nx = len(x) 
for i in range(0, len(x), nf): 
    OutputFile.write(ID[i//nf] + "\t" + x[i] + "\t" + y[i] + "\t" + x[i+1] + "\t" + y[i+1] + "\t" + x[i+2] + "\t" + y[i+2] + "\t" + x[i+3] + "\t" + y[i+3] + "\n") 
OutputFile.close() 

и более Pythonic:

n, nf = 2, 4 
x = [str(i) for i in range(n * nf)] 
y = [str(i*2) for i in range(n * nf)] 
ID = [str(1001*i) for i in range(nf)] 
OutputFile = open('output3.txt', 'w') 
for i in range(0, len(x), nf): 
    line = '\t'.join([x[i+j] + '\t' + y[i+j] for j in range(nf)]) 
    OutputFile.write(ID[i//nf] + '\t' + line + '\n') 
OutputFile.close() 

также работает. Возможно, вам придется поделиться некоторыми вашими данными, чтобы добиться большего прогресса.

+0

Мои численные значения являются типами str. Тем не менее, я не могу получить его так, как хочу. Я действительно пытаюсь опубликовать свои данные, но редактор не позволяет мне писать их! –

+0

ДА! Сделал это! Это не работало, потому что я был списком \ n-терминированных строк! \ М / –

0

Может быть, это то, что вы ищете:

with open('output.txt', 'w') as fo: 
    with open('input.txt', 'r') as fi: 
     for i, line in enumerate(fi.readlines()): 
      print(line.strip(), end=' ', file=fo) 
      if not (i+1) % 17: 
       print(file=fo) 

Он просто выводит строки без конца строк, но тогда действительно добавляет окончание строки в каждой 17-й линии. Вы получаете конечное пространство в конце каждой строки. Если вы действительно не хотите этого, вы могли бы сделать список ваших входных линий, а затем присоединиться к ним:

with open('output.txt', 'w') as fo: 
    with open('input.txt', 'r') as fi: 
     lines = [] 
     for i, line in enumerate(fi.readlines()): 
      lines.append(line.strip()) 
      if not (i+1) % 17: 
       print(' '.join(lines)) 
       lines = [] 
+0

Спасибо за ответ, но это не то, что я ищу. Не уверен, что на самом деле делает первый скрипт, а второй скрипт просто возвращает мой входной файл так, как он есть. Я думаю, что мой вопрос проще. Мой скрипт делает то, что мне нужно, кроме того, что вывод не похож на то, что мне нужно. Мне бы только хотелось узнать, почему он не пишет на одной строке. В python 2.7.x это сработало для меня. –

+0

Ах. Вы уверены, что в конце ваших значений y нет окончаний строк (читаются ли они как строки?)? – xnx

+0

Не имеет значения, читаю ли я их как str или int, результат всегда один и тот же. Я не могу написать их в одной строке! Черт! –

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