【问题标题】:How to split elements in a list and get date and time from a list如何拆分列表中的元素并从列表中获取日期和时间
【发布时间】:2019-02-11 20:43:33
【问题描述】:

从一开始,我就一直在努力用 Python 导入文件并以最佳方式读取行。 比如我有一个文件如下:

2015 02 25    09:00:00
A second line
One more line

现在我想从第一行提取日期和时间;为此,我们希望它采用我认为的这种格式,以使其在 datetime 模块中工作

(2015,02,25,09,00,00)

这就是我所拥有的

with open('file.txt', newline='') as inputfile:
  data = inputfile.readlines()
  print(data[0])
Out: ['2015 02 25    09:00:00']

这给了我们列表的第一个元素。现在我想从中制作一个逗号分隔的列表。现在,当我尝试这个时:

In: datetime = [i.split(':') for i in file[0]]
Out: [['2015 02 25    09', '00', '00']]

我得到了一个列表列表,这并没有让事情变得更容易。而且我们甚至还没有拆分空格。从中获取日期和时间的最佳方法是什么? 更一般地说,你知道任何好的教程来练习列表/字符串拆分,迭代文本文件/列表等。

【问题讨论】:

  • 你能把你的 expected 输出放在问题中吗?

标签: python list split readlines


【解决方案1】:

我想你想要这个:

line="2015 02 25    09:00:00\n"   # here line is data[0]

toks = line.split()
date = " ".join(toks[:3])
time = toks[-1]   # you can split it according to ":" now if you want

print(date)
print(time)

打印:

2015 02 25
09:00:00

根据1-n个空格分割token,然后加入前3个token得到日期,最后一个元素得到时间。

Python 3 允许星号解包,因此您可以直接执行此操作:

*datetoks,time = line.split()
date = " ".join(datetoks)

datetoks 包含除最后一个之外的所有令牌,感谢*

【讨论】:

    【解决方案2】:

    要从您的输入中获取日期和时间(或者更确切地说是datetime),最简单的方法是使用strptime

    import datetime
    
    s = "2015 02 25    09:00:00"
    
    dt = datetime.datetime.strptime(s, "%Y %m %d %H:%M:%S")
    
    print(dt)
    

    输出:

    2015-02-25 09:00:00
    

    您甚至不必担心“格式”字符串中的确切空格数。

    然后您可以根据需要转换/格式化日期时间对象。

    【讨论】:

      【解决方案3】:

      为什么不逐行读取每一行,然后将每一行附加到一个列表中?

      mylist = []
      with open(filename) as f:
          for line in f.readlines():
              mylist.append(line.strip("\n")) \\strip to get rid of the new line from the file
          print mylist
      

      这将单独读取文件中的每一行,然后将每一行添加到逗号分隔列表中

      这是你要找的吗?

      输出应该是这样的

      ['2015 02 25    09:00:00', '2015 02 27    09:10:00', '2015 02 29    09:20:00']
      

      这是来自文件中的 3 行,但我只是使用相同的条目,如果文件中有 3 个不同的条目,它会将不同的条目放入列表中

      我认为这里没有人真正知道你想要什么,如果你能提出你正在寻找的最终结果,这将对每个人都有很大帮助并更快地给你答案

      【讨论】:

        【解决方案4】:

        用空格.split(" ") 分割行并从前3 个字符串中提取yearmonthday。现在,最后一个字符串有time,用:分割它,即.split(":")提取hoursminutesseconds

        f = open("sample.txt", "r")
        
        data = f.read()
        lines = data.split("\n")
        first_line = lines[0]
        
        str_arr = first_line.split(" ")
        year = int(str_arr[0])
        month = int(str_arr[1])
        day = int(str_arr[2])
        print("year : " + str(year))
        print("Month : " + str(month))
        print("Day : " + str(day))
        
        last_index = len(str_arr)-1
        time = str_arr[last_index].split(":")
        hours = int(time[0])
        minutes = int(time[1])
        seconds = int(time[2])
        print("Hours : " + str(hours))
        print("Minutes : " + str(minutes))
        print("seconds : " + str(seconds))
        
        f.close()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-27
          • 1970-01-01
          • 1970-01-01
          • 2014-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-20
          相关资源
          最近更新 更多