Могу я получить помощь по следующей проблеме. Кажется, я не могу определить, где я ошибся в своем коде. У меня есть 2 выходных файла csv из моего кода. Первый обеспечивает правильный формат, а второй - нет:

First output file (fileB in my code)
A,B,C
D,E,F

Second output file (fileC in my code)
A,B,
  C
D,E,
  F

Вот мой код:

file1 = open ('fileA.csv', 'rt', newline = '')

shore_upstream = open('fileB.csv', 'wt', newline = '')
shore_downstream = open('fileC.csv', 'wt', newline = '')

for line in file1:
    first_comma = line.find(',')
    second_comma = line.find(',', first_comma + 1)
    start_coordinate = line [first_comma +1 : second_comma]
    start_coordinate_number = int(start_coordinate)
    end_coordinte = line [second_comma +1 :]
    end_coordinate_number = int (end_coordinte)
    upstream_start = start_coordinate_number - 2000
    downstream_end = end_coordinate_number + 2000
    upstream_start_string = str(upstream_start)
    downstring_end_string = str(downstream_end)
    upstream_shore = line[:first_comma]+','+ upstream_start_string + ',' + start_coordinate 
    shore_upstream.write(upstream_shore + '\n')
    downstream_shore = line[:first_comma]+ ','+ end_coordinte + ',' + downstring_end_string
    shore_downstream.write(downstream_shore + '\n')

file1.close()
shore_upstream.close()
shore_downstream.close()

Кстати, я использую python 3.3.

0
user3302763 18 Мар 2014 в 00:07
Есть ли причина, по которой вы не используете модуль csv?
 – 
DSM
18 Мар 2014 в 00:28

1 ответ

Лучший ответ

Ваша переменная end_coordinte может содержать в себе недесятичные символы и, вероятно, содержит \n\t в конце, что приводит к такому выводу.

Самым простым решением может быть оценка этих строк как числа и их распечатка в виде строк. Заменять:

upstream_shore = line[:first_comma]+','+ upstream_start_string + ',' + start_coordinate
downstream_shore = line[:first_comma]+ ','+ end_coordinte + ',' + downstring_end_string

От:

upstream_shore = line[:first_comma]+','+ upstream_start_string + ',' + str(start_coordinate_number) 
downstream_shore = line[:first_comma]+ ','+ str(end_coordinate_number) + ',' + downstring_end_string

И обратите внимание на вывод line[:first_comma], так как он также может содержать символы, которых вы не ожидаете.

0
user1759942 18 Мар 2014 в 00:41