2015-10-28 42 views
0

我是Python新手,請耐心等待。我嘗試使用切片提取列表中每個項目的前10個字符。該列表來自csv.reader函數。當我在csv.reader和我在代碼中創建的列表中使用它時,Slice似乎有不同的表現。 我的目錄timesheet.csv包含以下值:從csv.reader切片清單

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

縮進'CURRENT_DATE = X [:10]'正確下'for'環路它屬於 – Pynchia

+0

嘗試打印'x',你會發現它是一個列表。你可能需要'x [0] [:10]'。 – tdelaney

回答

1

問題是your_list中的項目是包含字符串的列表,而不是字符串。

嘗試:

for x in your_list: 
    current_date = x[0][:10] 
    print current_date 

這應該做你想要什麼。 x[0]是列表中包含的字符串,即x

注意,另一種方法採用熊貓:

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') 
+0

完美地工作。謝謝。 csv.reader是否總是返回列表的列表?或者它可能只是我的.csv格式化的方式? – Chloe

+0

csv文件的每一行都表示爲該行上(逗號分隔)項目的列表。我發現熊貓的API更直觀 - 請參閱上面我的答案的編輯。 – dslack

1

這是因爲your_list是列表的列表。要解決您的問題,請將current_date = x[:10]更改爲current_date = x[0][:10],這樣會很好。

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