Python CSV Writer, добавляющий .0 ко всем целым числам

Я написал некоторый код и попытался реорганизовать его, чтобы вырезать несколько шагов, и я не могу найти ответ на этот вопрос. Я читаю файл excel и делаю кучу переименований столбцов и удаляю столбцы, которые мне не нужны. Моя конечная цель - написать файл Excel в виде текстового файла с разделителями табуляции и выполнить все это, но очень хакерским способом. У меня есть функция convertToText(), которая читает файл excel и превращает его в текстовый файл. Однако к каждому целому числу в файле добавляется .0 в конце.

Ex.

Excel value 1234321

Txt File = 1234321.0

Я просто делаю простое чтение и запись, используя pandas, openpyxl и xlrd.

def convertToText():
        with open(os.path.join(outFile, 'target2.txt'), 'wb') as myTxtfile:
            wr = csv.writer(myTxtfile, delimiter="\t") 
            myfile = xlrd.open_workbook(outFile + fileName)
            mysheet = myfile.sheet_by_index(0)
            for rownum in xrange(mysheet.nrows):
               wr.writerow(mysheet.row_values(rownum))

Мне пришлось написать вторую функцию только для поиска и замены на .0 и попытаться исключить этот шаг из процесса. Если у кого-то есть идеи, как это сделать в приведенной выше функции, будем очень признательны!


person Andrew Singer    schedule 05.03.2018    source источник
comment
можешь распечатать mysheet.row_values(rownum) и показать нам?   -  person Jean-François Fabre    schedule 05.03.2018
comment
Вы уверены, что при просмотре файла в Excel он не скрывает исходные десятичные разряды?   -  person OneCricketeer    schedule 05.03.2018
comment
Вам просто нужно убедиться, что числа являются целыми числами: в Excel они все с плавающей запятой.   -  person Charlie Clark    schedule 05.03.2018
comment
@ Jean-FrançoisFabre, это не дубликат того, против которого вы отметили. Другой вопрос касается простого чтения чисел как целых чисел, а этот вопрос касается не только чтения, но и сохранения в файле CSV. Могут быть ответы, которые могут выполнять задачи иначе, чем ответы на другой вопрос. Поэтому я предлагаю восстановить этот вопрос и вновь открыть его.   -  person murphy1310    schedule 05.03.2018
comment
хорошо, но если вы читаете как целые числа, то запись больше не проблема. Ссылка объясняет, как преобразовать в целое число при чтении. Я жду, пока ОП отредактирует свой пост, чтобы объяснить, почему это не дубликат. Я не собираюсь снова открывать без дополнительных аргументов (иначе я не смогу снова закрыть). Некоторое другое золото питона может сделать это.   -  person Jean-François Fabre    schedule 05.03.2018
comment
дело в том, что ответ на другой вопрос дается, как только устанавливается конверсия. Но здесь может быть возможность другого подхода. Другой вопрос может быть о маленьком файле, и простое преобразование на уровне ячеек могло бы сработать, но здесь это мог быть огромный файл, и другая логика могла бы быть лучше, например, избегать прохождения циклов для преобразования ячеек.   -  person murphy1310    schedule 05.03.2018
comment
Привет всем, только что увидел, что на этот вопрос есть ответ. Я собираюсь попробовать решение и дам вам знать. Также я подтвердил, что если я печатаю прямо из Excel, код в порядке. у меня был код, выводящий мой новый файл excel и преобразованный в текст, и я проверил оба. Excel был в порядке, а в текстовом файле были .0.   -  person Andrew Singer    schedule 19.03.2018


Ответы (1)


это то же самое, что вы имеете в виду?

Так что я думаю, что ваш код должен стать, хотя у меня нет тестовых данных, поэтому я не могу его попробовать:

def convertToText():
    with open(os.path.join(outFile, 'target2.txt'), 'wb') as myTxtfile:
        wr = csv.writer(myTxtfile, delimiter="\t") 
        myfile = xlrd.open_workbook(outFile + fileName)
        mysheet = myfile.sheet_by_index(0)
        for rownum in xrange(mysheet.nrows):
           wr.writerow([int(i) for i in mysheet.row_values(rownum)])
person ArnJac    schedule 05.03.2018
comment
@AmJac Я только что попробовал приведенный выше код, и он выдал ошибку. wr.writerow([int(i) for i in mysheet.row_values(rownum)]) ValueError: неверный литерал для int() с основанием 10: 'zip' есть идеи? - person Andrew Singer; 19.03.2018
comment
Похоже, в файле не только числовые значения, верно? - person ArnJac; 20.03.2018