2015-04-23 6 views
4

У меня есть папка с несколькими файлами csv. Каждый файл состоит из столбца даты и значения. Я хотел бы объединить все файлы в один, где первый столбец состоит из даты значения (что одинаково для каждого файла), а другие столбцы заполняются значениями каждого отдельного vile, то есть (date, value_file1, value_file2 ...)Объединение нескольких файлов CSV

Любые предложения о том, как это может быть достигнуто с помощью простого скрипта python или, может быть, evan через команду unix?

Благодарим за помощь!

+1

возможно дубликат [питона соединения двух файлов CSV] (http://stackoverflow.com/questions/11786094/python-joining-two-csv- файлы) –

+0

столбцы 2-го файла просто добавляются к столбцам первого. Я хочу, чтобы столбцы второго файла помещались в новый столбец в объединенном файле, не добавляемом к текущим столбцам. – user3551674

+0

Это не совсем понятно - можете ли вы более четко объяснить, как выглядят файлы csv ввода? Где/когда даты совпадают? – StackG

ответ

2

Я рекомендую использовать такой инструмент, как csvkit's csvjoin

pip install csvkit 
$ csvjoin --help 
usage: csvjoin [-h] [-d DELIMITER] [-t] [-q QUOTECHAR] [-u {0,1,2,3}] [-b] 
       [-p ESCAPECHAR] [-z MAXFIELDSIZE] [-e ENCODING] [-S] [-v] [-l] 
       [--zero] [-c COLUMNS] [--outer] [--left] [--right] 
       [FILE [FILE ...]] 

Execute a SQL-like join to merge CSV files on a specified column or columns. 

positional arguments: 
    FILE     The CSV files to operate on. If only one is specified, 
         it will be copied to STDOUT. 

optional arguments: 
    -h, --help   show this help message and exit 
    -d DELIMITER, --delimiter DELIMITER 
         Delimiting character of the input CSV file. 
    -t, --tabs   Specifies that the input CSV file is delimited with 
         tabs. Overrides "-d". 
    -q QUOTECHAR, --quotechar QUOTECHAR 
         Character used to quote strings in the input CSV file. 
    -u {0,1,2,3}, --quoting {0,1,2,3} 
         Quoting style used in the input CSV file. 0 = Quote 
         Minimal, 1 = Quote All, 2 = Quote Non-numeric, 3 = 
         Quote None. 
    -b, --doublequote  Whether or not double quotes are doubled in the input 
         CSV file. 
    -p ESCAPECHAR, --escapechar ESCAPECHAR 
         Character used to escape the delimiter if --quoting 3 
         ("Quote None") is specified and to escape the 
         QUOTECHAR if --doublequote is not specified. 
    -z MAXFIELDSIZE, --maxfieldsize MAXFIELDSIZE 
         Maximum length of a single field in the input CSV 
         file. 
    -e ENCODING, --encoding ENCODING 
         Specify the encoding the input CSV file. 
    -S, --skipinitialspace 
         Ignore whitespace immediately following the delimiter. 
    -v, --verbose   Print detailed tracebacks when errors occur. 
    -l, --linenumbers  Insert a column of line numbers at the front of the 
         output. Useful when piping to grep or as a simple 
         primary key. 
    --zero    When interpreting or displaying column numbers, use 
         zero-based numbering instead of the default 1-based 
         numbering. 
    -c COLUMNS, --columns COLUMNS 
         The column name(s) on which to join. Should be either 
         one name (or index) or a comma-separated list with one 
         name (or index) for each file, in the same order that 
         the files were specified. May also be left 
         unspecified, in which case the two files will be 
         joined sequentially without performing any matching. 
    --outer    Perform a full outer join, rather than the default 
         inner join. 
    --left    Perform a left outer join, rather than the default 
         inner join. If more than two files are provided this 
         will be executed as a sequence of left outer joins, 
         starting at the left. 
    --right    Perform a right outer join, rather than the default 
         inner join. If more than two files are provided this 
         will be executed as a sequence of right outer joins, 
         starting at the right. 

Note that the join operation requires reading all files into memory. Don't try 
this on very large files. 
+0

Большое вам спасибо! Это именно то, что я искал! – user3551674

Смежные вопросы