如何在 python 3.8.10 中仅打印时间日志文件(txt 文件)的开始和结束时间
How to print only the start and endtime from a time log file(txt file) in python 3.8.10
这是我正在使用的代码,我得到的是部分输出
def main():
with open('time.txt') as f:
linenumber=0
for lines in f:
a=f.readlines()
for i in range(0,len(lines)):
print(a[i].split()[1],a[i].split()[3])
#print (a[i])
if __name__=='__main__':
main()
txt 文件包含以下元素:
time.txt
我得到的输出是
output
在输出中,程序不会打印到 txt 文件的末尾,它只会打印到某一行并停止。不知道原因。
假设您有一个名为 time.txt
的文件,其中包含您知道的以下内容 VALID:
Time Log:
2/23/12: 9:10pm - 11:40pm getting familiar with Flash
2/29/12: 12:50pm - 2:00pm getting familiar with Flash
3/1/12: 6:00pm - 11:40pm getting familiar with Flash
3/3/12: 3:00pm - 7:00pm step-debug Energy Game code
3/4/12: 8:00pm - 11:40pm start carbon game
3/5/12: 2:00pm - 3:00pm
4:00pm - 4:30pm carbon game
3/6/12: 11:30am - 1:30pm carbon game data structures and classes for the first action
3/7/12: 11:00am - 5:00pm tested basic concept
3/8/12: 1:00am - 1:30am changed vector calling,
10:30am - 2:30pm
4:00pm - 5:00pm wrote code to draw points indicator and marshal the data code;
3/9/12: 12:00am - 2:30am added CarbonActionCategoryView.as and captured some icons
11:30am - 4:50pm research how to resize; labor work to capture icons; research how to use event/delegate;
3/10/12: 1:50am - 6:00am event/delegate alternative implementation; score fields implementation
10:40am - 1:00pm define CarbonConsts.as for those names; implemented points fields
3/12/12: 10:45am - 5:00pm research on scrollpane, to no avail
3/13/12: 11:00am - 5:00pm research on Slider customization and make some progress without fully satisfication
3/14/12: 12:10pm - 5:00pm continue to research on Slider and got some idea
3/15/12: 3:30am - 4:30am experiment with CarbonSlider concept
11:00am - 5:00pm "Flash Training with Paul Trani" and continue to experiment with CarbonSlider concept
3/16/12: 10:00am - 5:00pm integrate the CarbonSlider class into the Game project
8:00pm - 9:00pm added the display of the slider thumb value;
9:30pm - 11:00pm clean-up the resources and adjust slider.x; start to modify CarbonPointsIndicator.as
3/17/12: 6:00am - 7:00am
12:00pm - 12:50pm
4:00pm - 7:00pm bad CarbonPointsIndicator modification
3/18/12: 9:10am - 9:40am draw 2-pixels rectangle and 1-pixel tick for Points Indicator
9:40am - 10:30am debug biofueled cars & trucks, mix in wood in coal plants
11:30am - 3:30pm scrollpane implementation - alternative
11:00pm - 12:00am read Adobe Flash Professional online help
3/19/12: 5:00am - 6:00am read Adobe Flash Professional online help
3/20/12: 9:00am - 10:00am discuss with Dr. Lant and Blanca.
10:00am - 11:00am slider width will be proportional per page or section, total score is changed to total carbon points, options remaining tops 100
3/23/12: 1:30pm - 3:30pm install Adobe Illustrator
4:00pm - 5:00pm Flash Professional online help
3/29/12: 3:11am - 7:00am background shape study, to no avail
11:00am - 12:50pm continue background shape study - no longer needed
3:00pm - 5:05pm scroll pane automatically adjusted based on the view size; dynamically created static texts
10:25pm - 11:00pm adjust positions of text fields
3/30/12: 9:50am - 11:30am loading images in AS 3 training; flash work cycle training
11:40am - 2:20pm experiment with ideas; learn illustrator
3:20pm - 5:05pm re-captured all .png files; .ai files do not have any advantage over .png files
3/31/12: 7:00am - 9:00am change the color of points indicator; add PPU; use Bitmap instead of MovieClip;
4/2/12: 12:10pm - 1:42pm study mask and Shape; come up with the concept of carbon progressbar
1:43pm - 5:00pm implement the carbon progressbar using mask and shape
7:00pm - 7:40pm implement the carbon progressbar by drawing bar and outline
11:00pm - 12:05am added total options and options
4/3/12: 1:30am - 3:00am added Options In Total static text field; Options Remaining will not go negative.
4/4/12: 3:50pm - 5:00pm update the icons
8:35pm - 11:50pm continue to update the icons; use the colors in .ai file
4/9/12: 12:30pm - 6:00pm update based on feedback
9:50pm - 2:30am
4/10/12: 8:56am - 9:57am
- 10.remove "other"
- 9. add "Replace Cement"
- 8. move current points slightly to the right
- 7. center max points on last tic mark
- 6. provide a bit more white space for four large boxes at the top
- 5. At top of left-hand column, label boxes "Tons of Carbon per unit"
- 4. PPU boxes. Align vertically. Expand. "Points per Unit" at the top of this column.
- 3. decrease Improve Insulation limit from 20 to 15
- 2. optionsRemaining and optionsUsed
- 1. total carbon points bar
5/19/12: 4:03pm - 6:57pm update based on teachers' feedback and dynamically dragging slide
6/4/12: 3:30pm - 5:04pm prev/more options implementation
8:15pm - 10:00pm
3/13/13: 2:11pm - 5:12pm Make numbers in the yellow triangles bigger and bolder; Make numbers in the options used and remaining bigger and bolder
您可以使用辅助函数来检查 "starttime" 行的可能部分是否以 am
或 pm
结尾:
def is_time(s: str) -> bool:
return s.endswith('am') or s.endswith('pm')
def main() -> None:
with open('time.txt', 'r') as log_file:
next(log_file) # Skip first line.
for line in log_file:
line_parts = line.split()
if line_parts[0].count('/') == 2: # Line starts with a date.
if is_time(line_parts[1]):
print(' '.join(line_parts[1:4]))
else:
if is_time(line_parts[0]):
print(' '.join(line_parts[0:3]))
if __name__ == '__main__':
main()
输出:
9:10pm - 11:40pm
12:50pm - 2:00pm
6:00pm - 11:40pm
3:00pm - 7:00pm
8:00pm - 11:40pm
2:00pm - 3:00pm
4:00pm - 4:30pm
11:30am - 1:30pm
11:00am - 5:00pm
1:00am - 1:30am
10:30am - 2:30pm
4:00pm - 5:00pm
12:00am - 2:30am
11:30am - 4:50pm
1:50am - 6:00am
10:40am - 1:00pm
10:45am - 5:00pm
11:00am - 5:00pm
12:10pm - 5:00pm
3:30am - 4:30am
11:00am - 5:00pm
10:00am - 5:00pm
8:00pm - 9:00pm
9:30pm - 11:00pm
6:00am - 7:00am
12:00pm - 12:50pm
4:00pm - 7:00pm
9:10am - 9:40am
9:40am - 10:30am
11:30am - 3:30pm
11:00pm - 12:00am
5:00am - 6:00am
9:00am - 10:00am
10:00am - 11:00am
1:30pm - 3:30pm
4:00pm - 5:00pm
3:11am - 7:00am
11:00am - 12:50pm
3:00pm - 5:05pm
10:25pm - 11:00pm
9:50am - 11:30am
11:40am - 2:20pm
3:20pm - 5:05pm
7:00am - 9:00am
12:10pm - 1:42pm
1:43pm - 5:00pm
7:00pm - 7:40pm
11:00pm - 12:05am
1:30am - 3:00am
3:50pm - 5:00pm
8:35pm - 11:50pm
12:30pm - 6:00pm
9:50pm - 2:30am
8:56am - 9:57am
4:03pm - 6:57pm
3:30pm - 5:04pm
8:15pm - 10:00pm
2:11pm - 5:12pm
要计算总小时数,您可以将每个时间间隔解析为 timedelta
:
from datetime import datetime, timedelta
def is_time(s: str) -> bool:
return s.endswith('am') or s.endswith('pm')
def parse_12_hour_time(time: str) -> datetime:
return datetime.strptime(time, '%I:%M%p')
def get_timedelta(start_time: str, end_time: str) -> timedelta:
return parse_12_hour_time(end_time) - parse_12_hour_time(start_time)
def timedelta_to_hours(td: timedelta) -> float:
return td.total_seconds() / 3600
def main() -> None:
total_hours = 0
with open('time.txt', 'r') as log_file:
next(log_file) # Skip first row.
for line in log_file:
line_parts = line.split()
if line_parts[0].count('/') == 2: # Line starts with a date.
if is_time(line_parts[1]):
td = get_timedelta(line_parts[1], line_parts[3])
total_hours += timedelta_to_hours(td)
else:
if is_time(line_parts[0]):
td = get_timedelta(line_parts[0], line_parts[2])
total_hours += timedelta_to_hours(td)
print(f'{total_hours = :.2f}')
if __name__ == '__main__':
main()
输出:
total_hours = 74.38
这是我正在使用的代码,我得到的是部分输出
def main():
with open('time.txt') as f:
linenumber=0
for lines in f:
a=f.readlines()
for i in range(0,len(lines)):
print(a[i].split()[1],a[i].split()[3])
#print (a[i])
if __name__=='__main__':
main()
txt 文件包含以下元素: time.txt
我得到的输出是 output
在输出中,程序不会打印到 txt 文件的末尾,它只会打印到某一行并停止。不知道原因。
假设您有一个名为 time.txt
的文件,其中包含您知道的以下内容 VALID:
Time Log:
2/23/12: 9:10pm - 11:40pm getting familiar with Flash
2/29/12: 12:50pm - 2:00pm getting familiar with Flash
3/1/12: 6:00pm - 11:40pm getting familiar with Flash
3/3/12: 3:00pm - 7:00pm step-debug Energy Game code
3/4/12: 8:00pm - 11:40pm start carbon game
3/5/12: 2:00pm - 3:00pm
4:00pm - 4:30pm carbon game
3/6/12: 11:30am - 1:30pm carbon game data structures and classes for the first action
3/7/12: 11:00am - 5:00pm tested basic concept
3/8/12: 1:00am - 1:30am changed vector calling,
10:30am - 2:30pm
4:00pm - 5:00pm wrote code to draw points indicator and marshal the data code;
3/9/12: 12:00am - 2:30am added CarbonActionCategoryView.as and captured some icons
11:30am - 4:50pm research how to resize; labor work to capture icons; research how to use event/delegate;
3/10/12: 1:50am - 6:00am event/delegate alternative implementation; score fields implementation
10:40am - 1:00pm define CarbonConsts.as for those names; implemented points fields
3/12/12: 10:45am - 5:00pm research on scrollpane, to no avail
3/13/12: 11:00am - 5:00pm research on Slider customization and make some progress without fully satisfication
3/14/12: 12:10pm - 5:00pm continue to research on Slider and got some idea
3/15/12: 3:30am - 4:30am experiment with CarbonSlider concept
11:00am - 5:00pm "Flash Training with Paul Trani" and continue to experiment with CarbonSlider concept
3/16/12: 10:00am - 5:00pm integrate the CarbonSlider class into the Game project
8:00pm - 9:00pm added the display of the slider thumb value;
9:30pm - 11:00pm clean-up the resources and adjust slider.x; start to modify CarbonPointsIndicator.as
3/17/12: 6:00am - 7:00am
12:00pm - 12:50pm
4:00pm - 7:00pm bad CarbonPointsIndicator modification
3/18/12: 9:10am - 9:40am draw 2-pixels rectangle and 1-pixel tick for Points Indicator
9:40am - 10:30am debug biofueled cars & trucks, mix in wood in coal plants
11:30am - 3:30pm scrollpane implementation - alternative
11:00pm - 12:00am read Adobe Flash Professional online help
3/19/12: 5:00am - 6:00am read Adobe Flash Professional online help
3/20/12: 9:00am - 10:00am discuss with Dr. Lant and Blanca.
10:00am - 11:00am slider width will be proportional per page or section, total score is changed to total carbon points, options remaining tops 100
3/23/12: 1:30pm - 3:30pm install Adobe Illustrator
4:00pm - 5:00pm Flash Professional online help
3/29/12: 3:11am - 7:00am background shape study, to no avail
11:00am - 12:50pm continue background shape study - no longer needed
3:00pm - 5:05pm scroll pane automatically adjusted based on the view size; dynamically created static texts
10:25pm - 11:00pm adjust positions of text fields
3/30/12: 9:50am - 11:30am loading images in AS 3 training; flash work cycle training
11:40am - 2:20pm experiment with ideas; learn illustrator
3:20pm - 5:05pm re-captured all .png files; .ai files do not have any advantage over .png files
3/31/12: 7:00am - 9:00am change the color of points indicator; add PPU; use Bitmap instead of MovieClip;
4/2/12: 12:10pm - 1:42pm study mask and Shape; come up with the concept of carbon progressbar
1:43pm - 5:00pm implement the carbon progressbar using mask and shape
7:00pm - 7:40pm implement the carbon progressbar by drawing bar and outline
11:00pm - 12:05am added total options and options
4/3/12: 1:30am - 3:00am added Options In Total static text field; Options Remaining will not go negative.
4/4/12: 3:50pm - 5:00pm update the icons
8:35pm - 11:50pm continue to update the icons; use the colors in .ai file
4/9/12: 12:30pm - 6:00pm update based on feedback
9:50pm - 2:30am
4/10/12: 8:56am - 9:57am
- 10.remove "other"
- 9. add "Replace Cement"
- 8. move current points slightly to the right
- 7. center max points on last tic mark
- 6. provide a bit more white space for four large boxes at the top
- 5. At top of left-hand column, label boxes "Tons of Carbon per unit"
- 4. PPU boxes. Align vertically. Expand. "Points per Unit" at the top of this column.
- 3. decrease Improve Insulation limit from 20 to 15
- 2. optionsRemaining and optionsUsed
- 1. total carbon points bar
5/19/12: 4:03pm - 6:57pm update based on teachers' feedback and dynamically dragging slide
6/4/12: 3:30pm - 5:04pm prev/more options implementation
8:15pm - 10:00pm
3/13/13: 2:11pm - 5:12pm Make numbers in the yellow triangles bigger and bolder; Make numbers in the options used and remaining bigger and bolder
您可以使用辅助函数来检查 "starttime" 行的可能部分是否以 am
或 pm
结尾:
def is_time(s: str) -> bool:
return s.endswith('am') or s.endswith('pm')
def main() -> None:
with open('time.txt', 'r') as log_file:
next(log_file) # Skip first line.
for line in log_file:
line_parts = line.split()
if line_parts[0].count('/') == 2: # Line starts with a date.
if is_time(line_parts[1]):
print(' '.join(line_parts[1:4]))
else:
if is_time(line_parts[0]):
print(' '.join(line_parts[0:3]))
if __name__ == '__main__':
main()
输出:
9:10pm - 11:40pm
12:50pm - 2:00pm
6:00pm - 11:40pm
3:00pm - 7:00pm
8:00pm - 11:40pm
2:00pm - 3:00pm
4:00pm - 4:30pm
11:30am - 1:30pm
11:00am - 5:00pm
1:00am - 1:30am
10:30am - 2:30pm
4:00pm - 5:00pm
12:00am - 2:30am
11:30am - 4:50pm
1:50am - 6:00am
10:40am - 1:00pm
10:45am - 5:00pm
11:00am - 5:00pm
12:10pm - 5:00pm
3:30am - 4:30am
11:00am - 5:00pm
10:00am - 5:00pm
8:00pm - 9:00pm
9:30pm - 11:00pm
6:00am - 7:00am
12:00pm - 12:50pm
4:00pm - 7:00pm
9:10am - 9:40am
9:40am - 10:30am
11:30am - 3:30pm
11:00pm - 12:00am
5:00am - 6:00am
9:00am - 10:00am
10:00am - 11:00am
1:30pm - 3:30pm
4:00pm - 5:00pm
3:11am - 7:00am
11:00am - 12:50pm
3:00pm - 5:05pm
10:25pm - 11:00pm
9:50am - 11:30am
11:40am - 2:20pm
3:20pm - 5:05pm
7:00am - 9:00am
12:10pm - 1:42pm
1:43pm - 5:00pm
7:00pm - 7:40pm
11:00pm - 12:05am
1:30am - 3:00am
3:50pm - 5:00pm
8:35pm - 11:50pm
12:30pm - 6:00pm
9:50pm - 2:30am
8:56am - 9:57am
4:03pm - 6:57pm
3:30pm - 5:04pm
8:15pm - 10:00pm
2:11pm - 5:12pm
要计算总小时数,您可以将每个时间间隔解析为 timedelta
:
from datetime import datetime, timedelta
def is_time(s: str) -> bool:
return s.endswith('am') or s.endswith('pm')
def parse_12_hour_time(time: str) -> datetime:
return datetime.strptime(time, '%I:%M%p')
def get_timedelta(start_time: str, end_time: str) -> timedelta:
return parse_12_hour_time(end_time) - parse_12_hour_time(start_time)
def timedelta_to_hours(td: timedelta) -> float:
return td.total_seconds() / 3600
def main() -> None:
total_hours = 0
with open('time.txt', 'r') as log_file:
next(log_file) # Skip first row.
for line in log_file:
line_parts = line.split()
if line_parts[0].count('/') == 2: # Line starts with a date.
if is_time(line_parts[1]):
td = get_timedelta(line_parts[1], line_parts[3])
total_hours += timedelta_to_hours(td)
else:
if is_time(line_parts[0]):
td = get_timedelta(line_parts[0], line_parts[2])
total_hours += timedelta_to_hours(td)
print(f'{total_hours = :.2f}')
if __name__ == '__main__':
main()
输出:
total_hours = 74.38