在使用datetime.strptime(s,fmt)來輸出結果日期結果時,出現錯誤
TypeError: strptime() argument 1 must be str, not bytes
我的源代碼如下
def datestr2num(s):
return datetime.strptime(s, "%d-%m-%Y").date().weekday()
dates=np.loadtxt('data.csv', delimiter=',', usecols=(1,), converters={1: datestr2num}, unpack=True)
data.csv內容如下

編譯器在打開data.csv文件時,將表格里的第2列數組值提取出來返回給dates,第二列值是日期格式字符串,但因為我們是以二進制編碼的格式打開第二列值是,返回的值字節字符串bytes,所以需要把它便會string,則對字符串解碼用函數decode('asii'),變成string格式。
def datestr2num(s):
return datetime.strptime(s.decode('ascii'), "%d-%m-%Y").date().weekday()
dates=np.loadtxt('data.csv', delimiter=',', usecols=(1,), converters={1: datestr2num}, unpack=True)
從網上摘抄的英文解釋如下:
line is a bytestring, because you opened the file in binary mode. You'll need to decode the string; if it is a date string matching the pattern, you can simply use ASCII:
time.strptime(line.decode('ascii'), '%Y-%m-%d ...')
You can add a 'ignore' argument to ignore anything non-ASCII, but chances are the line won't fit your date format then anyway.
Note that you cannot pass a value that contains more than the parsed format in it; a line with other text on it not explicitly covered by the strptime() pattern will not work, whatever codec you used.
And if your input really varies that widely in codecs, you'll need to catch exceptions one way or another anyway.
Aside from UTF-16 or UTF-32, I would not expect you to encounter any codecs that use different bytes for the arabic numerals. If your input really mixes multi-byte and single-byte codecs in one file, you have a bigger problem on your hand, not in the least because newline handling will be majorly messed up.
