在Win8上使用python3.3。我认为自己是个脚本新手。我试图在没有前导零的Excel电子表格中处理日期。一年总有2位数字,一个月先出,然后一天在中间。我可以提取Excel列,将其单独放入文件中。我可以通过下面的一些可识别的日期和行的格式来确定:
1188年(年月日)
11188(问题日期)
12188(问题日期)
13188(mddyy)
21188(mddyy)
111188(年月日)
我想我的问题有两个部分:
(1) 使用Python修改时,哪种类型的文件最容易处理(例如XLSX、XLS、CSV、TXT等)
(2) 有没有关于用Python编写以下逻辑的提示…也许可以使用函数?在
下面是我的逻辑,我想申请,因为我知道没有办法实际判断日期是否只有5位数,以“11”或“12”开头,所以我想把错误改为,这样我们就可以回去手动修正这些数字。这个想法是体力劳动越少越好。在年底总是2位数字表示年份,因此需要立即解析出剩余的数字
如果年份数字从“00”到“30”,则附加一个前导“20”,形成一个4位数的年份
否则附上一个前导的“19”组成一个4位数的年份
计算除去年份数字后剩余的位数
如果total digits left=2,则解析出第一个和第二个数字,并将前导零加到两个数字上
否则,如果剩余总位数=3,则
如果前两个数字是“11”或“12”,则将最终结果打印为“错误”
否则,如果前两个数字是“10”,则按原样进行解析,并将前导零添加到第三个数字
否则,解析出第一个数字并加上前导零,然后按原样解析出剩余的2个数字
否则总位数为4,则不执行任何操作
确保日期以新的格式放回最终结果
非常感谢你的帮助,让我自己开始行动!在
我的旅程
起初,我需要帮助我把我的逻辑输入Python,然后与以下问题作了斗争,但最终还是成功地与时间,研究和stackoverflow的帮助人员:读取/写入/附加CSV文件,填充前导零,填充年份的前导数字,语法,不正确的数据类型等等……感谢所有这些帮助!!!在
完成以下代码!!!!!!!在import csv
# Change to location of CSV file
with open('c:\\Users\\Weez\\Desktop\\csv_test.csv', newline='') as csvfile:
csvreader = csv.reader(csvfile)
for line in csvreader:
baddate = line[0]
year = int(baddate) % 100
md = int(baddate) // 100
# Check year values
if year < 10:
year = str(200)+str(year)
elif year <= 50:
year = str(20)+str(year)
else:
year = str(19)+str(year)
# Check month and day values
if md < 100:
month = md // 10
month = str(month).zfill(2)
day = md % 10
day = str(day).zfill(2)
elif md >= 1000:
pass
elif md <= 109:
month = md // 10
day = md % 10
day = str(day).zfill(2)
elif md == 110:
month = md // 100
month = str(month).zfill(2)
day = md % 100
elif md == 120:
month = md // 100
month = str(month).zfill(2)
day = md % 100
elif md <= 129:
month = str("XX")
day = str("XX")
else:
month = md // 100
month = str(month).zfill(2)
day = md % 100
dateresult = str(month)+str(day)+str(year)
print(dateresult)
# modes 'a' = append, 'w' = write, 'r' = read and other modes
with open('c:\\Users\\Weez\\Desktop\\csv_test_output.csv', 'a') as csvoutput:
csvoutput.write(dateresult)
csvoutput.write('\n')
print('\n')
print('\n')
str(input("Process complete! Press Enter to finish!"))