J'ai une chaîne qui ressemble à ceci:

"2018-05-23-13:54:56.594000"

Lorsque j'essaie de le convertir en int, cela me donne une erreur:

ValueError: invalid literal for int() with base 10: '"2018-05-23-13:54:56.594000"'

Code:

output_file = open(r"C:\PATH\123.acc.bin", "wb")

with open(r"C:\PATH\00000007.csv", newline='') as csvfile:
    sensor = csv.reader(csvfile, delimiter=',', quotechar='|')

    with open(r"C:\PATH\3dm2.csv", newline='') as csvfile:
        sensor2 = csv.reader(csvfile, delimiter=',', quotechar='|')

        for row, row2 in zip(sensor, sensor2):

            internalTimestamp  = int(row2[16])
            msInfile = (int(float(row2[12])*1000)) + (1523138400000+604800000)

            accX    = float(row[0])
            accY    = float(row[1])
            accZ    = float(row[2])
            roll    = float(row[3])
            pitch   = float(row[4])
            yaw     = float(row[5])

            accData2 = pack('f', accX)
            accData3 = pack('f', accY)
            accData4 = pack('f', accZ)
            accData5 = pack('f', roll)
            accData6 = pack('f', pitch)
            accData7 = pack('f', yaw)
            accData8 = pack('I', internalTimestamp)
            accData9 = pack('I', ValidData)
            accData10 = pack('q', msInfile)

            output_file.write(accData2)
            output_file.write(accData3)
            output_file.write(accData4)
            output_file.write(accData5)
            output_file.write(accData6)
            output_file.write(accData7)
            output_file.write(accData8)
            output_file.write(accData9)
            output_file.write(accData10)
            count += 1

C'est mon code où j'emballe les données de deux fichiers csv différents dans un fichier binaire.

1
JohnBigDick 23 mai 2018 à 15:18

3 réponses

Meilleure réponse

Si vous voulez votre datetime au format unix.

import datetime
import time
s = "2018-05-23-13:54:56.594000"

d = datetime.datetime.strptime(s, "%Y-%m-%d-%H:%M:%S.%f")
print(time.mktime(d.timetuple()))

Sortie:

1527063896.0
5
Rakesh 23 mai 2018 à 12:24

Cette chaîne n'est pas en base 10. Elle contient des tirets et d'autres caractères qui ne sont pas dans le système en base 10.

Donc, python ne peut pas le convertir en int

0
user8750495user8750495 23 mai 2018 à 12:24

En effet, vous avez des caractères non numériques dans la chaîne. Pour que int() soit correctement converti, vous devez lui passer une chaîne avec uniquement des caractères numériques.

Essayez de remplacer les caractères non numériques de la chaîne à l'aide de la méthode .replace() avant de passer la chaîne. Voici quelques informations sur cette méthode!

En outre, vous souhaiterez peut-être convertir le datetime en une représentation entière. Pour ce faire, consultez cette question précédente!

0
RobertMonaco 23 mai 2018 à 12:24