我是Python新手所以请耐心等待。我正在尝试使用切片提取列表中每个项目的前10个字符。该列表来自csv.reader函数。当我在csv.reader列表中使用切片与我在代码中创建的列表时,切片的行为似乎有所不同。
我的列表timesheet.csv
包含以下值:
20/10/2015 09:10
20/10/2015 10:20
20/10/2015 16:30
21/10/2015 08:30
21/10/2015 09:45
21/10/2015 10:22
21/10/2015 14:01
我正在尝试删除仅留下日期的时间。所以我认为下面的代码应该这样做:
import csv
with open('timesheet.csv', 'r') as f:
reader = csv.reader(f)
your_list = list(reader)
for x in your_list:
current_date = x[:10]
print(current_date)
我曾预料到它会输出:
20/10/2015
20/10/2015
20/10/2015
21/10/2015
21/10/2015
21/10/2015
21/10/2015
但我得到了整个清单:
20/10/2015 09:10
20/10/2015 10:20
20/10/2015 16:30
21/10/2015 08:30
21/10/2015 09:45
21/10/2015 10:22
21/10/2015 14:01
奇怪的是,如果我通过以不同的方式添加列表进行测试,例如。
your_list = ['21/10/2015 16:14', '20/10/2015 23:00']
for x in your_list:
current_date = x[:10]
print(current_date)
输出就像我想要的那样:
21/10/2015
20/10/2015
我认为它与切片修剪列表项目中的项目数而不是字符有关,但我不清楚为什么? 感谢
答案 0 :(得分:1)
这是因为your_list
是一个列表清单。要解决您的问题,请将current_date = x[:10]
更改为current_date = x[0][:10]
,这样会很好。
答案 1 :(得分:1)
问题是your_list
中的项目是包含字符串而不是字符串的列表。
尝试:
for x in your_list:
current_date = x[0][:10]
print current_date
这应该做你想要的。 x[0]
是列表中包含的字符串x
。
注意,另一种方法是使用pandas:
import pandas as pd
df = pd.read_csv('timesheet.csv', header=None)
for xx in pd.DatetimeIndex(df[0]):
print xx.strftime('%d/%m/%Y')
答案 2 :(得分:0)
试试这个:
with open("your_file") as f:
for line in f:
print line.split()[0]
#or print line[:10] if you want to use slicing approach