我在名为Original的同一目录中有多个 .csv
文件,我想按日期对所有这些文件进行排序,降序(最旧的第一个)-第二列。每个文件都应该排序并覆盖原始文件。有可能吗?如果没有,则保存在另一个名为Sorted 的目录中。有人可以帮助我吗?
原始 csv
ORA.PA,13/04/2021,10.35,10.35,10.14,10.21,4299528
ORA.PA,27/02/2019,13.36,13.48,13.29,13.3,6929606
ORA.PA,26/02/2019,13.46,13.52,13.35,13.4,6031759
ORA.PA,05/11/2018,13.94,14.21,13.9,14.16,7692439
ORA.PA,02/11/2018,14.1,14.1,13.9,13.96,6867565
ORA.PA,15/04/2011,7.84,7.89,7.7,7.75,8277622
ORA.PA,14/08/2001,20.22,20.22,19.74,19.85,9221300
所需的输出
ORA.PA,14/08/2001,20.22,20.22,19.74,19.85,9221300
ORA.PA,15/04/2011,7.84,7.89,7.7,7.75,8277622
ORA.PA,02/11/2018,14.1,14.1,13.9,13.96,6867565
ORA.PA,05/11/2018,13.94,14.21,13.9,14.16,7692439
ORA.PA,26/02/2019,13.46,13.52,13.35,13.4,6031759
ORA.PA,27/02/2019,13.36,13.48,13.29,13.3,6929606
ORA.PA,13/04/2021,10.35,10.35,10.14,10.21,4299528
这是我使用的代码但不起作用,我什么也没得到
import csv
import operator
import glob
data = dict()
path="/Original/*.csv"
files=glob.glob(path)
for filename in files:
with open(filename, 'r') as f:
lists = [row for row in csv.reader(f, delimiter=',')]
data[filename] = sorted(lists, operator.itemgetter(1), reverse=True)
谢谢!
您的代码存在多个问题。主要是你只是从文件中读取;不写它。您需要使用 'r+' 选项打开文件,以便能够写入文件和读取文件。此外,排序不会以这种方式工作,因为日期的格式为 dd/mm/yyyy。为了排序,它们应该颠倒,所以 yyyy-mm-dd。我还将从您的代码中读取的内联数据更改为实际的 for 循环,因为内联解决方案不起作用,尽管我不知道为什么会这样......
总而言之,以下代码应该可以解决您的问题,请让我知道它是否有效...
import csv
import operator
import glob
path="./Original/*.csv"
files=glob.glob(path)
for filename in files:
with open(filename, "r+", newline='') as f:
reader = csv.reader(f, delimiter=',')
lists = []
for row in reader:
lists.append(row)
# Reverses the date for sorting, so that they are sorted correctly
lists.sort(key=lambda a:'-'.join(a[1].split('/')[::-1]))
# deletes content of the file
f.truncate(0)
f.seek(0)
# writes the new data to the file
writer = csv.writer(f)
writer.writerows(lists)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句