从csv.reader切片列表

时间:2015-10-28 20:54:11

标签: python slice

我是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

我认为它与切片修剪列表项目中的项目数而不是字符有关,但我不清楚为什么? 感谢

3 个答案:

答案 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