动态命名已编辑的csv,以包含旧csv名称的一部分

GTP*_*TPE 0 python csv python-2.7 pandas

我使用一些代码来合并两个csv并按两列排序.输出一个新的csv.输入的csv具有相同的名称,编号为1和2.我正在为多组数据重复此代码.我想知道什么方法可以使代码输出一个包含原始文件名的第一部分的文件名.

我目前的代码:

import pandas as pd

df1 = pd.read_csv("data csv 1\September 2013 1 UUedit1.csv", delimiter = ",")
df2 = pd.read_csv("data csv 1\September 2013 2 UUedit2.csv", delimiter = ",")
merged = df1.merge(df2, on="Unique Element")
delcols = "Element_y", "number_y", "date_y", "title_y", "name_y"

for delcol in delcols:
    del merged[delcol]

merged.rename(columns={"name_x": "name", "rdate_x": "date", "title_x": "title", "number_x": "number", "Element_x": "Element"}, inplace = True)
merged = merged.sort("Element").reset_index(drop=True)
merged = merged.sort("date").reset_index(drop=True)
merged.to_csv("MRG.csv", index=False, sep = ",")
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,两个输入文件都被称为September 2013"数字""UUedit"我想让我的代码直接输出文件名,September 2013 MRG.csv如何编码?为了澄清两个原始文件是否October 2013是输出将是October 2013 MRG.csv 非常感谢GTPE

编辑

在运行Christian Ternus提供的代码后,我收到了以下打印和追溯:

Usage: C:/Test.py <month> <year>
Traceback (most recent call last):
  File "C:/Test.py", line 7, in <module>
    month, year = sys.argv[1:]
ValueError: need more than 0 values to unpack
Run Code Online (Sandbox Code Playgroud)

我不确定第二个变量应该设置为什么.
非常感谢
GTPE

编辑2

我设法通过调用CMD来使代码工作,但是我通过python调用脚本的尝试似乎不起作用.我尝试了以下内容:

import subprocess
p = subprocess.Popen(['python', 'RawDataSheetMergerPandasTest.py September 2013'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print out
Run Code Online (Sandbox Code Playgroud)

Chr*_*nus 5

以下是给出当月名称的下个月名称:

import calendar
nextmonth = calendar.month_name[1:][(calendar.month_name[1:].index(month) + 1) % 12]
Run Code Online (Sandbox Code Playgroud)

以下是同样的逻辑应用于您的脚本,还有一些其他改进:)运行此脚本为" ./myscript.py somemonth someyear".它将输出一个名为CSV的文件nextmonth year MRG.csv,甚至考虑到本地化和正确包装年份.

import pandas as pd
import calendar
import sys

if len(sys.argv) != 3:
    print "Usage: {0} <month> <year>".format(sys.argv[0])
month, year = sys.argv[1:]

if not month in calendar.month_name:
    print "Invalid month! Month must be one of:{0}".format(str(calendar.month_name))
if not year.isdigit():
    print "Invalid year! Year must be a number."

nextmonth = calendar.month_name[1:][(calendar.month_name[1:].index(month) + 1) % 12]

df1 = pd.read_csv("data csv 1\{0} {1} 1 UUedit1.csv".format(month, year), delimiter = ",")
df2 = pd.read_csv("data csv 1\{0} {1} 2 UUedit2.csv".format(month, year), delimiter = ",")
merged = df1.merge(df2, on="Unique Element")
delcols = "Element_y", "number_y", "date_y", "title_y", "name_y"

for delcol in delcols:
    del merged[delcol]

merged.rename(columns={"name_x": "name", "rdate_x": "date", "title_x": "title", "number_x": "number", "Element_x": "Element"}, inplace = True)
merged = merged.sort("Element").reset_index(drop=True)
merged = merged.sort("date").reset_index(drop=True)

if month == calendar.month_name[-1]: year = str(int(year + 1))

merged.to_csv("{0} {1} MRG.csv".format(nextmonth, year), index=False, sep = ",")
Run Code Online (Sandbox Code Playgroud)

如果你不需要下个月的功能(听起来你实际上没有),请取出以下两行:

nextmonth = calendar.month_name[1:][(calendar.month_name[1:].index(month) + 1) % 12]
[...]
if month == calendar.month_name[-1]: year = str(int(year + 1))
Run Code Online (Sandbox Code Playgroud)

并将最后一行替换为:

merged.to_csv("{0} {1} MRG.csv".format(month, year), index=False, sep = ",")
Run Code Online (Sandbox Code Playgroud)