[{"data":1,"prerenderedAt":2494},["ShallowReactive",2],{"doc-\u002Fexamples\u002Fpython-merge-csv-files-example":3},{"id":4,"title":5,"body":6,"description":2487,"extension":2488,"meta":2489,"navigation":90,"path":2490,"seo":2491,"stem":2492,"__hash__":2493},"content\u002Fexamples\u002Fpython-merge-csv-files-example.md","Python Merge CSV Files Example",{"type":7,"value":8,"toc":2456},"minimark",[9,13,17,20,41,44,49,563,569,573,576,593,597,600,614,623,627,630,1020,1023,1047,1059,1063,1070,1101,1110,1124,1127,1144,1147,1153,1177,1180,1193,1196,1219,1225,1275,1283,1286,1294,1303,1309,1360,1370,1373,1380,1384,1387,1401,1404,1412,1415,1436,1440,1443,1457,1460,1492,1496,1499,1503,1506,1509,1517,1520,1568,1572,1575,1578,1581,1586,1589,1593,1599,1601,1606,1609,1654,1661,1665,1668,1671,1714,1718,1721,1723,1728,1735,1742,1746,1749,1752,1772,1775,2251,2255,2258,2274,2278,2281,2344,2347,2364,2368,2372,2378,2382,2385,2389,2395,2399,2409,2413,2449,2452],[10,11,5],"h1",{"id":12},"python-merge-csv-files-example",[14,15,16],"p",{},"If you have several CSV files with the same columns, you can combine them into one output file with a short Python script.",[14,18,19],{},"This example shows a simple beginner-friendly way to:",[21,22,23,32,35,38],"ul",{},[24,25,26,27,31],"li",{},"read all ",[28,29,30],"code",{},".csv"," files from one folder",[24,33,34],{},"merge them into one file",[24,36,37],{},"write the header row only once",[24,39,40],{},"skip empty files safely",[14,42,43],{},"It also helps you avoid common problems such as repeated headers, wrong file paths, and CSV encoding issues.",[45,46,48],"h2",{"id":47},"quick-example","Quick example",[50,51,56],"pre",{"className":52,"code":53,"language":54,"meta":55,"style":55},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import csv\nfrom pathlib import Path\n\ninput_folder = Path(\"csv_files\")\noutput_file = Path(\"merged.csv\")\n\ncsv_files = sorted(input_folder.glob(\"*.csv\"))\n\nwith output_file.open(\"w\", newline=\"\", encoding=\"utf-8\") as outfile:\n    writer = None\n\n    for file_index, file_path in enumerate(csv_files):\n        with file_path.open(\"r\", newline=\"\", encoding=\"utf-8\") as infile:\n            reader = csv.reader(infile)\n            header = next(reader, None)\n\n            if header is None:\n                continue\n\n            if writer is None:\n                writer = csv.writer(outfile)\n                writer.writerow(header)\n\n            for row in reader:\n                writer.writerow(row)\n\nprint(f\"Merged {len(csv_files)} files into {output_file}\")\n","python","",[28,57,58,71,85,92,123,144,149,184,189,250,262,267,294,345,368,390,395,411,417,422,436,458,476,481,497,513,518],{"__ignoreMap":55},[59,60,63,67],"span",{"class":61,"line":62},"line",1,[59,64,66],{"class":65},"sVHd0","import",[59,68,70],{"class":69},"su5hD"," csv\n",[59,72,74,77,80,82],{"class":61,"line":73},2,[59,75,76],{"class":65},"from",[59,78,79],{"class":69}," pathlib ",[59,81,66],{"class":65},[59,83,84],{"class":69}," Path\n",[59,86,88],{"class":61,"line":87},3,[59,89,91],{"emptyLinePlaceholder":90},true,"\n",[59,93,95,98,102,106,110,114,118,120],{"class":61,"line":94},4,[59,96,97],{"class":69},"input_folder ",[59,99,101],{"class":100},"smGrS","=",[59,103,105],{"class":104},"slqww"," Path",[59,107,109],{"class":108},"sP7_E","(",[59,111,113],{"class":112},"sjJ54","\"",[59,115,117],{"class":116},"s_sjI","csv_files",[59,119,113],{"class":112},[59,121,122],{"class":108},")\n",[59,124,126,129,131,133,135,137,140,142],{"class":61,"line":125},5,[59,127,128],{"class":69},"output_file ",[59,130,101],{"class":100},[59,132,105],{"class":104},[59,134,109],{"class":108},[59,136,113],{"class":112},[59,138,139],{"class":116},"merged.csv",[59,141,113],{"class":112},[59,143,122],{"class":108},[59,145,147],{"class":61,"line":146},6,[59,148,91],{"emptyLinePlaceholder":90},[59,150,152,155,157,161,163,166,169,172,174,176,179,181],{"class":61,"line":151},7,[59,153,154],{"class":69},"csv_files ",[59,156,101],{"class":100},[59,158,160],{"class":159},"sptTA"," sorted",[59,162,109],{"class":108},[59,164,165],{"class":104},"input_folder",[59,167,168],{"class":108},".",[59,170,171],{"class":104},"glob",[59,173,109],{"class":108},[59,175,113],{"class":112},[59,177,178],{"class":116},"*.csv",[59,180,113],{"class":112},[59,182,183],{"class":108},"))\n",[59,185,187],{"class":61,"line":186},8,[59,188,91],{"emptyLinePlaceholder":90},[59,190,192,195,198,200,203,205,207,210,212,215,219,221,224,226,229,231,233,236,238,241,244,247],{"class":61,"line":191},9,[59,193,194],{"class":65},"with",[59,196,197],{"class":69}," output_file",[59,199,168],{"class":108},[59,201,202],{"class":104},"open",[59,204,109],{"class":108},[59,206,113],{"class":112},[59,208,209],{"class":116},"w",[59,211,113],{"class":112},[59,213,214],{"class":108},",",[59,216,218],{"class":217},"s99_P"," newline",[59,220,101],{"class":100},[59,222,223],{"class":112},"\"\"",[59,225,214],{"class":108},[59,227,228],{"class":217}," encoding",[59,230,101],{"class":100},[59,232,113],{"class":112},[59,234,235],{"class":116},"utf-8",[59,237,113],{"class":112},[59,239,240],{"class":108},")",[59,242,243],{"class":65}," as",[59,245,246],{"class":69}," outfile",[59,248,249],{"class":108},":\n",[59,251,253,256,258],{"class":61,"line":252},10,[59,254,255],{"class":69},"    writer ",[59,257,101],{"class":100},[59,259,261],{"class":260},"s39Yj"," None\n",[59,263,265],{"class":61,"line":264},11,[59,266,91],{"emptyLinePlaceholder":90},[59,268,270,273,276,278,281,284,287,289,291],{"class":61,"line":269},12,[59,271,272],{"class":65},"    for",[59,274,275],{"class":69}," file_index",[59,277,214],{"class":108},[59,279,280],{"class":69}," file_path ",[59,282,283],{"class":65},"in",[59,285,286],{"class":159}," enumerate",[59,288,109],{"class":108},[59,290,117],{"class":104},[59,292,293],{"class":108},"):\n",[59,295,297,300,303,305,307,309,311,314,316,318,320,322,324,326,328,330,332,334,336,338,340,343],{"class":61,"line":296},13,[59,298,299],{"class":65},"        with",[59,301,302],{"class":69}," file_path",[59,304,168],{"class":108},[59,306,202],{"class":104},[59,308,109],{"class":108},[59,310,113],{"class":112},[59,312,313],{"class":116},"r",[59,315,113],{"class":112},[59,317,214],{"class":108},[59,319,218],{"class":217},[59,321,101],{"class":100},[59,323,223],{"class":112},[59,325,214],{"class":108},[59,327,228],{"class":217},[59,329,101],{"class":100},[59,331,113],{"class":112},[59,333,235],{"class":116},[59,335,113],{"class":112},[59,337,240],{"class":108},[59,339,243],{"class":65},[59,341,342],{"class":69}," infile",[59,344,249],{"class":108},[59,346,348,351,353,356,358,361,363,366],{"class":61,"line":347},14,[59,349,350],{"class":69},"            reader ",[59,352,101],{"class":100},[59,354,355],{"class":69}," csv",[59,357,168],{"class":108},[59,359,360],{"class":104},"reader",[59,362,109],{"class":108},[59,364,365],{"class":104},"infile",[59,367,122],{"class":108},[59,369,371,374,376,379,381,383,385,388],{"class":61,"line":370},15,[59,372,373],{"class":69},"            header ",[59,375,101],{"class":100},[59,377,378],{"class":159}," next",[59,380,109],{"class":108},[59,382,360],{"class":104},[59,384,214],{"class":108},[59,386,387],{"class":260}," None",[59,389,122],{"class":108},[59,391,393],{"class":61,"line":392},16,[59,394,91],{"emptyLinePlaceholder":90},[59,396,398,401,404,407,409],{"class":61,"line":397},17,[59,399,400],{"class":65},"            if",[59,402,403],{"class":69}," header ",[59,405,406],{"class":100},"is",[59,408,387],{"class":260},[59,410,249],{"class":108},[59,412,414],{"class":61,"line":413},18,[59,415,416],{"class":65},"                continue\n",[59,418,420],{"class":61,"line":419},19,[59,421,91],{"emptyLinePlaceholder":90},[59,423,425,427,430,432,434],{"class":61,"line":424},20,[59,426,400],{"class":65},[59,428,429],{"class":69}," writer ",[59,431,406],{"class":100},[59,433,387],{"class":260},[59,435,249],{"class":108},[59,437,439,442,444,446,448,451,453,456],{"class":61,"line":438},21,[59,440,441],{"class":69},"                writer ",[59,443,101],{"class":100},[59,445,355],{"class":69},[59,447,168],{"class":108},[59,449,450],{"class":104},"writer",[59,452,109],{"class":108},[59,454,455],{"class":104},"outfile",[59,457,122],{"class":108},[59,459,461,464,466,469,471,474],{"class":61,"line":460},22,[59,462,463],{"class":69},"                writer",[59,465,168],{"class":108},[59,467,468],{"class":104},"writerow",[59,470,109],{"class":108},[59,472,473],{"class":104},"header",[59,475,122],{"class":108},[59,477,479],{"class":61,"line":478},23,[59,480,91],{"emptyLinePlaceholder":90},[59,482,484,487,490,492,495],{"class":61,"line":483},24,[59,485,486],{"class":65},"            for",[59,488,489],{"class":69}," row ",[59,491,283],{"class":65},[59,493,494],{"class":69}," reader",[59,496,249],{"class":108},[59,498,500,502,504,506,508,511],{"class":61,"line":499},25,[59,501,463],{"class":69},[59,503,168],{"class":108},[59,505,468],{"class":104},[59,507,109],{"class":108},[59,509,510],{"class":104},"row",[59,512,122],{"class":108},[59,514,516],{"class":61,"line":515},26,[59,517,91],{"emptyLinePlaceholder":90},[59,519,521,524,526,530,533,537,540,542,544,546,549,552,554,557,559,561],{"class":61,"line":520},27,[59,522,523],{"class":159},"print",[59,525,109],{"class":108},[59,527,529],{"class":528},"sbsja","f",[59,531,532],{"class":116},"\"Merged ",[59,534,536],{"class":535},"srdBf","{",[59,538,539],{"class":159},"len",[59,541,109],{"class":108},[59,543,117],{"class":104},[59,545,240],{"class":108},[59,547,548],{"class":535},"}",[59,550,551],{"class":116}," files into ",[59,553,536],{"class":535},[59,555,556],{"class":104},"output_file",[59,558,548],{"class":535},[59,560,113],{"class":116},[59,562,122],{"class":108},[14,564,565,566,568],{},"This example merges all ",[28,567,30],{}," files in one folder and writes the header only once.",[45,570,572],{"id":571},"what-this-example-does","What this example does",[14,574,575],{},"This script:",[21,577,578,581,587,590],{},[24,579,580],{},"Combines multiple CSV files into one file",[24,582,583,584,586],{},"Reads all ",[28,585,30],{}," files from a folder",[24,588,589],{},"Writes the header row only once",[24,591,592],{},"Skips empty files safely",[45,594,596],{"id":595},"when-to-use-this-approach","When to use this approach",[14,598,599],{},"Use this script when:",[21,601,602,605,608,611],{},[24,603,604],{},"You have many CSV files with the same columns",[24,606,607],{},"You want one combined file for analysis",[24,609,610],{},"You need a simple script without extra libraries",[24,612,613],{},"You are learning file handling and loops",[14,615,616,617,622],{},"If you are new to file operations, it may also help to read ",[618,619,621],"a",{"href":620},"\u002Flearn\u002Fpython-file-handling-basics-read-and-write\u002F","Python file handling basics"," first.",[45,624,626],{"id":625},"how-the-script-works","How the script works",[14,628,629],{},"Here is the same script again with the key idea in mind: read each file, keep only the first header, and write all data rows into one output file.",[50,631,632],{"className":52,"code":53,"language":54,"meta":55,"style":55},[28,633,634,640,650,654,672,690,694,720,724,770,778,782,802,848,866,884,888,900,904,908,920,938,952,956,968,982,986],{"__ignoreMap":55},[59,635,636,638],{"class":61,"line":62},[59,637,66],{"class":65},[59,639,70],{"class":69},[59,641,642,644,646,648],{"class":61,"line":73},[59,643,76],{"class":65},[59,645,79],{"class":69},[59,647,66],{"class":65},[59,649,84],{"class":69},[59,651,652],{"class":61,"line":87},[59,653,91],{"emptyLinePlaceholder":90},[59,655,656,658,660,662,664,666,668,670],{"class":61,"line":94},[59,657,97],{"class":69},[59,659,101],{"class":100},[59,661,105],{"class":104},[59,663,109],{"class":108},[59,665,113],{"class":112},[59,667,117],{"class":116},[59,669,113],{"class":112},[59,671,122],{"class":108},[59,673,674,676,678,680,682,684,686,688],{"class":61,"line":125},[59,675,128],{"class":69},[59,677,101],{"class":100},[59,679,105],{"class":104},[59,681,109],{"class":108},[59,683,113],{"class":112},[59,685,139],{"class":116},[59,687,113],{"class":112},[59,689,122],{"class":108},[59,691,692],{"class":61,"line":146},[59,693,91],{"emptyLinePlaceholder":90},[59,695,696,698,700,702,704,706,708,710,712,714,716,718],{"class":61,"line":151},[59,697,154],{"class":69},[59,699,101],{"class":100},[59,701,160],{"class":159},[59,703,109],{"class":108},[59,705,165],{"class":104},[59,707,168],{"class":108},[59,709,171],{"class":104},[59,711,109],{"class":108},[59,713,113],{"class":112},[59,715,178],{"class":116},[59,717,113],{"class":112},[59,719,183],{"class":108},[59,721,722],{"class":61,"line":186},[59,723,91],{"emptyLinePlaceholder":90},[59,725,726,728,730,732,734,736,738,740,742,744,746,748,750,752,754,756,758,760,762,764,766,768],{"class":61,"line":191},[59,727,194],{"class":65},[59,729,197],{"class":69},[59,731,168],{"class":108},[59,733,202],{"class":104},[59,735,109],{"class":108},[59,737,113],{"class":112},[59,739,209],{"class":116},[59,741,113],{"class":112},[59,743,214],{"class":108},[59,745,218],{"class":217},[59,747,101],{"class":100},[59,749,223],{"class":112},[59,751,214],{"class":108},[59,753,228],{"class":217},[59,755,101],{"class":100},[59,757,113],{"class":112},[59,759,235],{"class":116},[59,761,113],{"class":112},[59,763,240],{"class":108},[59,765,243],{"class":65},[59,767,246],{"class":69},[59,769,249],{"class":108},[59,771,772,774,776],{"class":61,"line":252},[59,773,255],{"class":69},[59,775,101],{"class":100},[59,777,261],{"class":260},[59,779,780],{"class":61,"line":264},[59,781,91],{"emptyLinePlaceholder":90},[59,783,784,786,788,790,792,794,796,798,800],{"class":61,"line":269},[59,785,272],{"class":65},[59,787,275],{"class":69},[59,789,214],{"class":108},[59,791,280],{"class":69},[59,793,283],{"class":65},[59,795,286],{"class":159},[59,797,109],{"class":108},[59,799,117],{"class":104},[59,801,293],{"class":108},[59,803,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846],{"class":61,"line":296},[59,805,299],{"class":65},[59,807,302],{"class":69},[59,809,168],{"class":108},[59,811,202],{"class":104},[59,813,109],{"class":108},[59,815,113],{"class":112},[59,817,313],{"class":116},[59,819,113],{"class":112},[59,821,214],{"class":108},[59,823,218],{"class":217},[59,825,101],{"class":100},[59,827,223],{"class":112},[59,829,214],{"class":108},[59,831,228],{"class":217},[59,833,101],{"class":100},[59,835,113],{"class":112},[59,837,235],{"class":116},[59,839,113],{"class":112},[59,841,240],{"class":108},[59,843,243],{"class":65},[59,845,342],{"class":69},[59,847,249],{"class":108},[59,849,850,852,854,856,858,860,862,864],{"class":61,"line":347},[59,851,350],{"class":69},[59,853,101],{"class":100},[59,855,355],{"class":69},[59,857,168],{"class":108},[59,859,360],{"class":104},[59,861,109],{"class":108},[59,863,365],{"class":104},[59,865,122],{"class":108},[59,867,868,870,872,874,876,878,880,882],{"class":61,"line":370},[59,869,373],{"class":69},[59,871,101],{"class":100},[59,873,378],{"class":159},[59,875,109],{"class":108},[59,877,360],{"class":104},[59,879,214],{"class":108},[59,881,387],{"class":260},[59,883,122],{"class":108},[59,885,886],{"class":61,"line":392},[59,887,91],{"emptyLinePlaceholder":90},[59,889,890,892,894,896,898],{"class":61,"line":397},[59,891,400],{"class":65},[59,893,403],{"class":69},[59,895,406],{"class":100},[59,897,387],{"class":260},[59,899,249],{"class":108},[59,901,902],{"class":61,"line":413},[59,903,416],{"class":65},[59,905,906],{"class":61,"line":419},[59,907,91],{"emptyLinePlaceholder":90},[59,909,910,912,914,916,918],{"class":61,"line":424},[59,911,400],{"class":65},[59,913,429],{"class":69},[59,915,406],{"class":100},[59,917,387],{"class":260},[59,919,249],{"class":108},[59,921,922,924,926,928,930,932,934,936],{"class":61,"line":438},[59,923,441],{"class":69},[59,925,101],{"class":100},[59,927,355],{"class":69},[59,929,168],{"class":108},[59,931,450],{"class":104},[59,933,109],{"class":108},[59,935,455],{"class":104},[59,937,122],{"class":108},[59,939,940,942,944,946,948,950],{"class":61,"line":460},[59,941,463],{"class":69},[59,943,168],{"class":108},[59,945,468],{"class":104},[59,947,109],{"class":108},[59,949,473],{"class":104},[59,951,122],{"class":108},[59,953,954],{"class":61,"line":478},[59,955,91],{"emptyLinePlaceholder":90},[59,957,958,960,962,964,966],{"class":61,"line":483},[59,959,486],{"class":65},[59,961,489],{"class":69},[59,963,283],{"class":65},[59,965,494],{"class":69},[59,967,249],{"class":108},[59,969,970,972,974,976,978,980],{"class":61,"line":499},[59,971,463],{"class":69},[59,973,168],{"class":108},[59,975,468],{"class":104},[59,977,109],{"class":108},[59,979,510],{"class":104},[59,981,122],{"class":108},[59,983,984],{"class":61,"line":515},[59,985,91],{"emptyLinePlaceholder":90},[59,987,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018],{"class":61,"line":520},[59,989,523],{"class":159},[59,991,109],{"class":108},[59,993,529],{"class":528},[59,995,532],{"class":116},[59,997,536],{"class":535},[59,999,539],{"class":159},[59,1001,109],{"class":108},[59,1003,117],{"class":104},[59,1005,240],{"class":108},[59,1007,548],{"class":535},[59,1009,551],{"class":116},[59,1011,536],{"class":535},[59,1013,556],{"class":104},[59,1015,548],{"class":535},[59,1017,113],{"class":116},[59,1019,122],{"class":108},[14,1021,1022],{},"Step by step, the script does this:",[21,1024,1025,1032,1035,1038,1041,1044],{},[24,1026,1027,1028,1031],{},"Use ",[28,1029,1030],{},"pathlib.Path"," to find CSV files in a folder",[24,1033,1034],{},"Open the output file in write mode",[24,1036,1037],{},"Loop through each input CSV file",[24,1039,1040],{},"Read the first row as the header",[24,1042,1043],{},"Write the first header only once",[24,1045,1046],{},"Write all remaining rows to the output file",[14,1048,1049,1050,1054,1055,168],{},"If you want to understand the reading side in more detail, see ",[618,1051,1053],{"href":1052},"\u002Fhow-to\u002Fhow-to-read-a-csv-file-in-python\u002F","how to read a CSV file in Python",". For the writing side, see ",[618,1056,1058],{"href":1057},"\u002Fhow-to\u002Fhow-to-write-a-csv-file-in-python\u002F","how to write a CSV file in Python",[45,1060,1062],{"id":1061},"important-lines-to-explain","Important lines to explain",[1064,1065,1067],"h3",{"id":1066},"input_folderglobcsv",[28,1068,1069],{},"input_folder.glob(\"*.csv\")",[50,1071,1073],{"className":52,"code":1072,"language":54,"meta":55,"style":55},"csv_files = sorted(input_folder.glob(\"*.csv\"))\n",[28,1074,1075],{"__ignoreMap":55},[59,1076,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099],{"class":61,"line":62},[59,1078,154],{"class":69},[59,1080,101],{"class":100},[59,1082,160],{"class":159},[59,1084,109],{"class":108},[59,1086,165],{"class":104},[59,1088,168],{"class":108},[59,1090,171],{"class":104},[59,1092,109],{"class":108},[59,1094,113],{"class":112},[59,1096,178],{"class":116},[59,1098,113],{"class":112},[59,1100,183],{"class":108},[14,1102,1103,1104,1106,1107,1109],{},"This finds all files ending in ",[28,1105,30],{}," inside the ",[28,1108,117],{}," folder.",[21,1111,1112,1118],{},[24,1113,1114,1117],{},[28,1115,1116],{},"glob(\"*.csv\")"," matches CSV files only",[24,1119,1120,1123],{},[28,1121,1122],{},"sorted(...)"," gives a predictable file order",[14,1125,1126],{},"That means if your folder contains:",[21,1128,1129,1134,1139],{},[24,1130,1131],{},[28,1132,1133],{},"part1.csv",[24,1135,1136],{},[28,1137,1138],{},"part2.csv",[24,1140,1141],{},[28,1142,1143],{},"part3.csv",[14,1145,1146],{},"they will usually be processed in that sorted name order.",[1064,1148,1150],{"id":1149},"nextreader-none",[28,1151,1152],{},"next(reader, None)",[50,1154,1156],{"className":52,"code":1155,"language":54,"meta":55,"style":55},"header = next(reader, None)\n",[28,1157,1158],{"__ignoreMap":55},[59,1159,1160,1163,1165,1167,1169,1171,1173,1175],{"class":61,"line":62},[59,1161,1162],{"class":69},"header ",[59,1164,101],{"class":100},[59,1166,378],{"class":159},[59,1168,109],{"class":108},[59,1170,360],{"class":104},[59,1172,214],{"class":108},[59,1174,387],{"class":260},[59,1176,122],{"class":108},[14,1178,1179],{},"This reads the first row from the CSV file.",[21,1181,1182,1187],{},[24,1183,1184,1185],{},"If the file has data, the first row is stored in ",[28,1186,473],{},[24,1188,1189,1190],{},"If the file is empty, it returns ",[28,1191,1192],{},"None",[14,1194,1195],{},"That is why the script can safely skip empty files:",[50,1197,1199],{"className":52,"code":1198,"language":54,"meta":55,"style":55},"if header is None:\n    continue\n",[28,1200,1201,1214],{"__ignoreMap":55},[59,1202,1203,1206,1208,1210,1212],{"class":61,"line":62},[59,1204,1205],{"class":65},"if",[59,1207,403],{"class":69},[59,1209,406],{"class":100},[59,1211,387],{"class":260},[59,1213,249],{"class":108},[59,1215,1216],{"class":61,"line":73},[59,1217,1218],{"class":65},"    continue\n",[1064,1220,1222],{"id":1221},"writer-is-none",[28,1223,1224],{},"writer is None",[50,1226,1228],{"className":52,"code":1227,"language":54,"meta":55,"style":55},"if writer is None:\n    writer = csv.writer(outfile)\n    writer.writerow(header)\n",[28,1229,1230,1242,1260],{"__ignoreMap":55},[59,1231,1232,1234,1236,1238,1240],{"class":61,"line":62},[59,1233,1205],{"class":65},[59,1235,429],{"class":69},[59,1237,406],{"class":100},[59,1239,387],{"class":260},[59,1241,249],{"class":108},[59,1243,1244,1246,1248,1250,1252,1254,1256,1258],{"class":61,"line":73},[59,1245,255],{"class":69},[59,1247,101],{"class":100},[59,1249,355],{"class":69},[59,1251,168],{"class":108},[59,1253,450],{"class":104},[59,1255,109],{"class":108},[59,1257,455],{"class":104},[59,1259,122],{"class":108},[59,1261,1262,1265,1267,1269,1271,1273],{"class":61,"line":87},[59,1263,1264],{"class":69},"    writer",[59,1266,168],{"class":108},[59,1268,468],{"class":104},[59,1270,109],{"class":108},[59,1272,473],{"class":104},[59,1274,122],{"class":108},[14,1276,1277,1278,1280,1281,168],{},"At the start, ",[28,1279,450],{}," is set to ",[28,1282,1192],{},[14,1284,1285],{},"That lets the script know that it has not written the output header yet. When it reaches the first non-empty file:",[21,1287,1288,1291],{},[24,1289,1290],{},"it creates the CSV writer",[24,1292,1293],{},"it writes that file's header row once",[14,1295,1296,1297,1299,1300,1302],{},"After that, ",[28,1298,450],{}," is no longer ",[28,1301,1192],{},", so later headers are skipped.",[1064,1304,1306],{"id":1305},"newline",[28,1307,1308],{},"newline=\"\"",[50,1310,1312],{"className":52,"code":1311,"language":54,"meta":55,"style":55},"with output_file.open(\"w\", newline=\"\", encoding=\"utf-8\") as outfile:\n",[28,1313,1314],{"__ignoreMap":55},[59,1315,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358],{"class":61,"line":62},[59,1317,194],{"class":65},[59,1319,197],{"class":69},[59,1321,168],{"class":108},[59,1323,202],{"class":104},[59,1325,109],{"class":108},[59,1327,113],{"class":112},[59,1329,209],{"class":116},[59,1331,113],{"class":112},[59,1333,214],{"class":108},[59,1335,218],{"class":217},[59,1337,101],{"class":100},[59,1339,223],{"class":112},[59,1341,214],{"class":108},[59,1343,228],{"class":217},[59,1345,101],{"class":100},[59,1347,113],{"class":112},[59,1349,235],{"class":116},[59,1351,113],{"class":112},[59,1353,240],{"class":108},[59,1355,243],{"class":65},[59,1357,246],{"class":69},[59,1359,249],{"class":108},[14,1361,1362,1363,1365,1366,1369],{},"Using ",[28,1364,1308],{}," is important when working with the ",[28,1367,1368],{},"csv"," module.",[14,1371,1372],{},"It helps CSV files be written correctly across operating systems and avoids extra blank lines in some environments.",[14,1374,1375,1376,168],{},"If you want more detail on file opening modes and parameters, see ",[618,1377,1379],{"href":1378},"\u002Freference\u002Fpython-open-function-explained\u002F","Python open() explained",[45,1381,1383],{"id":1382},"expected-input-structure","Expected input structure",[14,1385,1386],{},"This example works best when:",[21,1388,1389,1392,1395,1398],{},[24,1390,1391],{},"All files are real CSV files",[24,1393,1394],{},"Each file uses the same column order",[24,1396,1397],{},"Each file usually has the same header row",[24,1399,1400],{},"Files are stored in the folder path used in the script",[14,1402,1403],{},"For example, your folder might look like this:",[50,1405,1410],{"className":1406,"code":1408,"language":1409,"meta":55},[1407],"language-text","project\u002F\n├── merge_csv.py\n└── csv_files\u002F\n    ├── sales_jan.csv\n    ├── sales_feb.csv\n    └── sales_mar.csv\n","text",[28,1411,1408],{"__ignoreMap":55},[14,1413,1414],{},"And each file might contain data like this:",[50,1416,1419],{"className":1417,"code":1418,"language":1368,"meta":55,"style":55},"language-csv shiki shiki-themes material-theme-lighter github-light github-dark","name,amount\nAlice,100\nBob,200\n",[28,1420,1421,1426,1431],{"__ignoreMap":55},[59,1422,1423],{"class":61,"line":62},[59,1424,1425],{},"name,amount\n",[59,1427,1428],{"class":61,"line":73},[59,1429,1430],{},"Alice,100\n",[59,1432,1433],{"class":61,"line":87},[59,1434,1435],{},"Bob,200\n",[45,1437,1439],{"id":1438},"expected-output","Expected output",[14,1441,1442],{},"After running the script, you should get:",[21,1444,1445,1448,1451,1454],{},[24,1446,1447],{},"One merged CSV file",[24,1449,1450],{},"One header row at the top",[24,1452,1453],{},"All data rows from the input files below it",[24,1455,1456],{},"Rows in the order of the sorted file names",[14,1458,1459],{},"Example output:",[50,1461,1463],{"className":1417,"code":1462,"language":1368,"meta":55,"style":55},"name,amount\nAlice,100\nBob,200\nCarol,150\nDavid,300\nEve,250\n",[28,1464,1465,1469,1473,1477,1482,1487],{"__ignoreMap":55},[59,1466,1467],{"class":61,"line":62},[59,1468,1425],{},[59,1470,1471],{"class":61,"line":73},[59,1472,1430],{},[59,1474,1475],{"class":61,"line":87},[59,1476,1435],{},[59,1478,1479],{"class":61,"line":94},[59,1480,1481],{},"Carol,150\n",[59,1483,1484],{"class":61,"line":125},[59,1485,1486],{},"David,300\n",[59,1488,1489],{"class":61,"line":146},[59,1490,1491],{},"Eve,250\n",[45,1493,1495],{"id":1494},"common-problems-when-merging-csv-files","Common problems when merging CSV files",[14,1497,1498],{},"Here are some common issues beginners run into.",[1064,1500,1502],{"id":1501},"headers-get-repeated-in-the-output-file","Headers get repeated in the output file",[14,1504,1505],{},"This happens when you write the first row from every input file.",[14,1507,1508],{},"To avoid that:",[21,1510,1511,1514],{},[24,1512,1513],{},"write the header only for the first non-empty file",[24,1515,1516],{},"skip headers in all later files",[14,1518,1519],{},"The example does this with:",[50,1521,1522],{"className":52,"code":1227,"language":54,"meta":55,"style":55},[28,1523,1524,1536,1554],{"__ignoreMap":55},[59,1525,1526,1528,1530,1532,1534],{"class":61,"line":62},[59,1527,1205],{"class":65},[59,1529,429],{"class":69},[59,1531,406],{"class":100},[59,1533,387],{"class":260},[59,1535,249],{"class":108},[59,1537,1538,1540,1542,1544,1546,1548,1550,1552],{"class":61,"line":73},[59,1539,255],{"class":69},[59,1541,101],{"class":100},[59,1543,355],{"class":69},[59,1545,168],{"class":108},[59,1547,450],{"class":104},[59,1549,109],{"class":108},[59,1551,455],{"class":104},[59,1553,122],{"class":108},[59,1555,1556,1558,1560,1562,1564,1566],{"class":61,"line":87},[59,1557,1264],{"class":69},[59,1559,168],{"class":108},[59,1561,468],{"class":104},[59,1563,109],{"class":108},[59,1565,473],{"class":104},[59,1567,122],{"class":108},[1064,1569,1571],{"id":1570},"files-have-different-columns","Files have different columns",[14,1573,1574],{},"This simple script assumes every file has the same columns in the same order.",[14,1576,1577],{},"If one file has different headers, the output may become inconsistent.",[14,1579,1580],{},"Common cause:",[21,1582,1583],{},[24,1584,1585],{},"Using CSV files with different headers",[14,1587,1588],{},"A simple improvement is to compare each header to the first one before writing rows.",[1064,1590,1592],{"id":1591},"the-folder-path-is-wrong","The folder path is wrong",[14,1594,1595,1596,1598],{},"If Python cannot find the folder or files, ",[28,1597,117],{}," may be empty.",[14,1600,1580],{},[21,1602,1603],{},[24,1604,1605],{},"Using the wrong folder path",[14,1607,1608],{},"Useful debug checks:",[50,1610,1612],{"className":52,"code":1611,"language":54,"meta":55,"style":55},"print(csv_files)\nprint(len(csv_files))\nprint(output_file.resolve())\n",[28,1613,1614,1624,1638],{"__ignoreMap":55},[59,1615,1616,1618,1620,1622],{"class":61,"line":62},[59,1617,523],{"class":159},[59,1619,109],{"class":108},[59,1621,117],{"class":104},[59,1623,122],{"class":108},[59,1625,1626,1628,1630,1632,1634,1636],{"class":61,"line":73},[59,1627,523],{"class":159},[59,1629,109],{"class":108},[59,1631,539],{"class":159},[59,1633,109],{"class":108},[59,1635,117],{"class":104},[59,1637,183],{"class":108},[59,1639,1640,1642,1644,1646,1648,1651],{"class":61,"line":87},[59,1641,523],{"class":159},[59,1643,109],{"class":108},[59,1645,556],{"class":104},[59,1647,168],{"class":108},[59,1649,1650],{"class":104},"resolve",[59,1652,1653],{"class":108},"())\n",[14,1655,1656,1657,168],{},"If you get file path errors, see ",[618,1658,1660],{"href":1659},"\u002Ferrors\u002Ffilenotfounderror-errno-2-no-such-file-or-directory-fix\u002F","FileNotFoundError: No such file or directory fix",[1064,1662,1664],{"id":1663},"the-script-includes-empty-files","The script includes empty files",[14,1666,1667],{},"An empty file has no header row and no data rows.",[14,1669,1670],{},"This example handles that safely with:",[50,1672,1674],{"className":52,"code":1673,"language":54,"meta":55,"style":55},"header = next(reader, None)\n\nif header is None:\n    continue\n",[28,1675,1676,1694,1698,1710],{"__ignoreMap":55},[59,1677,1678,1680,1682,1684,1686,1688,1690,1692],{"class":61,"line":62},[59,1679,1162],{"class":69},[59,1681,101],{"class":100},[59,1683,378],{"class":159},[59,1685,109],{"class":108},[59,1687,360],{"class":104},[59,1689,214],{"class":108},[59,1691,387],{"class":260},[59,1693,122],{"class":108},[59,1695,1696],{"class":61,"line":73},[59,1697,91],{"emptyLinePlaceholder":90},[59,1699,1700,1702,1704,1706,1708],{"class":61,"line":87},[59,1701,1205],{"class":65},[59,1703,403],{"class":69},[59,1705,406],{"class":100},[59,1707,387],{"class":260},[59,1709,249],{"class":108},[59,1711,1712],{"class":61,"line":94},[59,1713,1218],{"class":65},[1064,1715,1717],{"id":1716},"encoding-problems-cause-read-errors","Encoding problems cause read errors",[14,1719,1720],{},"Some CSV files are not saved as UTF-8.",[14,1722,1580],{},[21,1724,1725],{},[24,1726,1727],{},"Trying to merge files with a different text encoding",[14,1729,1730,1731,1734],{},"If you see decoding errors, check the file encoding or try a different one such as ",[28,1732,1733],{},"\"latin-1\""," if appropriate.",[14,1736,1737,1738,168],{},"Related help: ",[618,1739,1741],{"href":1740},"\u002Ferrors\u002Funicodedecodeerror-utf-8-codec-cant-decode-byte-fix\u002F","UnicodeDecodeError UTF-8 codec can't decode byte fix",[45,1743,1745],{"id":1744},"simple-improvements","Simple improvements",[14,1747,1748],{},"Once the basic script works, you can improve it in small steps.",[14,1750,1751],{},"You could:",[21,1753,1754,1757,1760,1763,1769],{},[24,1755,1756],{},"Check that all headers match before writing rows",[24,1758,1759],{},"Skip files that do not match the first header",[24,1761,1762],{},"Print each file name while processing",[24,1764,1027,1765,1768],{},[28,1766,1767],{},"csv.DictReader"," for column-based handling",[24,1770,1771],{},"Write only selected columns if needed",[14,1773,1774],{},"Here is a slightly safer version that checks headers before merging rows:",[50,1776,1778],{"className":52,"code":1777,"language":54,"meta":55,"style":55},"import csv\nfrom pathlib import Path\n\ninput_folder = Path(\"csv_files\")\noutput_file = Path(\"merged.csv\")\n\ncsv_files = sorted(input_folder.glob(\"*.csv\"))\nexpected_header = None\n\nwith output_file.open(\"w\", newline=\"\", encoding=\"utf-8\") as outfile:\n    writer = None\n\n    for file_path in csv_files:\n        print(f\"Processing: {file_path}\")\n\n        with file_path.open(\"r\", newline=\"\", encoding=\"utf-8\") as infile:\n            reader = csv.reader(infile)\n            header = next(reader, None)\n\n            if header is None:\n                print(\"  Skipped empty file\")\n                continue\n\n            if expected_header is None:\n                expected_header = header\n                writer = csv.writer(outfile)\n                writer.writerow(header)\n            elif header != expected_header:\n                print(\"  Skipped file with different header\")\n                continue\n\n            for row in reader:\n                writer.writerow(row)\n\nprint(f\"Merged files into {output_file}\")\n",[28,1779,1780,1786,1796,1800,1818,1836,1840,1866,1875,1879,1925,1933,1937,1950,1973,1977,2023,2041,2059,2063,2075,2091,2095,2099,2112,2122,2140,2154,2170,2186,2191,2196,2209,2224,2229],{"__ignoreMap":55},[59,1781,1782,1784],{"class":61,"line":62},[59,1783,66],{"class":65},[59,1785,70],{"class":69},[59,1787,1788,1790,1792,1794],{"class":61,"line":73},[59,1789,76],{"class":65},[59,1791,79],{"class":69},[59,1793,66],{"class":65},[59,1795,84],{"class":69},[59,1797,1798],{"class":61,"line":87},[59,1799,91],{"emptyLinePlaceholder":90},[59,1801,1802,1804,1806,1808,1810,1812,1814,1816],{"class":61,"line":94},[59,1803,97],{"class":69},[59,1805,101],{"class":100},[59,1807,105],{"class":104},[59,1809,109],{"class":108},[59,1811,113],{"class":112},[59,1813,117],{"class":116},[59,1815,113],{"class":112},[59,1817,122],{"class":108},[59,1819,1820,1822,1824,1826,1828,1830,1832,1834],{"class":61,"line":125},[59,1821,128],{"class":69},[59,1823,101],{"class":100},[59,1825,105],{"class":104},[59,1827,109],{"class":108},[59,1829,113],{"class":112},[59,1831,139],{"class":116},[59,1833,113],{"class":112},[59,1835,122],{"class":108},[59,1837,1838],{"class":61,"line":146},[59,1839,91],{"emptyLinePlaceholder":90},[59,1841,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864],{"class":61,"line":151},[59,1843,154],{"class":69},[59,1845,101],{"class":100},[59,1847,160],{"class":159},[59,1849,109],{"class":108},[59,1851,165],{"class":104},[59,1853,168],{"class":108},[59,1855,171],{"class":104},[59,1857,109],{"class":108},[59,1859,113],{"class":112},[59,1861,178],{"class":116},[59,1863,113],{"class":112},[59,1865,183],{"class":108},[59,1867,1868,1871,1873],{"class":61,"line":186},[59,1869,1870],{"class":69},"expected_header ",[59,1872,101],{"class":100},[59,1874,261],{"class":260},[59,1876,1877],{"class":61,"line":191},[59,1878,91],{"emptyLinePlaceholder":90},[59,1880,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923],{"class":61,"line":252},[59,1882,194],{"class":65},[59,1884,197],{"class":69},[59,1886,168],{"class":108},[59,1888,202],{"class":104},[59,1890,109],{"class":108},[59,1892,113],{"class":112},[59,1894,209],{"class":116},[59,1896,113],{"class":112},[59,1898,214],{"class":108},[59,1900,218],{"class":217},[59,1902,101],{"class":100},[59,1904,223],{"class":112},[59,1906,214],{"class":108},[59,1908,228],{"class":217},[59,1910,101],{"class":100},[59,1912,113],{"class":112},[59,1914,235],{"class":116},[59,1916,113],{"class":112},[59,1918,240],{"class":108},[59,1920,243],{"class":65},[59,1922,246],{"class":69},[59,1924,249],{"class":108},[59,1926,1927,1929,1931],{"class":61,"line":264},[59,1928,255],{"class":69},[59,1930,101],{"class":100},[59,1932,261],{"class":260},[59,1934,1935],{"class":61,"line":269},[59,1936,91],{"emptyLinePlaceholder":90},[59,1938,1939,1941,1943,1945,1948],{"class":61,"line":296},[59,1940,272],{"class":65},[59,1942,280],{"class":69},[59,1944,283],{"class":65},[59,1946,1947],{"class":69}," csv_files",[59,1949,249],{"class":108},[59,1951,1952,1955,1957,1959,1962,1964,1967,1969,1971],{"class":61,"line":347},[59,1953,1954],{"class":159},"        print",[59,1956,109],{"class":108},[59,1958,529],{"class":528},[59,1960,1961],{"class":116},"\"Processing: ",[59,1963,536],{"class":535},[59,1965,1966],{"class":104},"file_path",[59,1968,548],{"class":535},[59,1970,113],{"class":116},[59,1972,122],{"class":108},[59,1974,1975],{"class":61,"line":370},[59,1976,91],{"emptyLinePlaceholder":90},[59,1978,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021],{"class":61,"line":392},[59,1980,299],{"class":65},[59,1982,302],{"class":69},[59,1984,168],{"class":108},[59,1986,202],{"class":104},[59,1988,109],{"class":108},[59,1990,113],{"class":112},[59,1992,313],{"class":116},[59,1994,113],{"class":112},[59,1996,214],{"class":108},[59,1998,218],{"class":217},[59,2000,101],{"class":100},[59,2002,223],{"class":112},[59,2004,214],{"class":108},[59,2006,228],{"class":217},[59,2008,101],{"class":100},[59,2010,113],{"class":112},[59,2012,235],{"class":116},[59,2014,113],{"class":112},[59,2016,240],{"class":108},[59,2018,243],{"class":65},[59,2020,342],{"class":69},[59,2022,249],{"class":108},[59,2024,2025,2027,2029,2031,2033,2035,2037,2039],{"class":61,"line":397},[59,2026,350],{"class":69},[59,2028,101],{"class":100},[59,2030,355],{"class":69},[59,2032,168],{"class":108},[59,2034,360],{"class":104},[59,2036,109],{"class":108},[59,2038,365],{"class":104},[59,2040,122],{"class":108},[59,2042,2043,2045,2047,2049,2051,2053,2055,2057],{"class":61,"line":413},[59,2044,373],{"class":69},[59,2046,101],{"class":100},[59,2048,378],{"class":159},[59,2050,109],{"class":108},[59,2052,360],{"class":104},[59,2054,214],{"class":108},[59,2056,387],{"class":260},[59,2058,122],{"class":108},[59,2060,2061],{"class":61,"line":419},[59,2062,91],{"emptyLinePlaceholder":90},[59,2064,2065,2067,2069,2071,2073],{"class":61,"line":424},[59,2066,400],{"class":65},[59,2068,403],{"class":69},[59,2070,406],{"class":100},[59,2072,387],{"class":260},[59,2074,249],{"class":108},[59,2076,2077,2080,2082,2084,2087,2089],{"class":61,"line":438},[59,2078,2079],{"class":159},"                print",[59,2081,109],{"class":108},[59,2083,113],{"class":112},[59,2085,2086],{"class":116},"  Skipped empty file",[59,2088,113],{"class":112},[59,2090,122],{"class":108},[59,2092,2093],{"class":61,"line":460},[59,2094,416],{"class":65},[59,2096,2097],{"class":61,"line":478},[59,2098,91],{"emptyLinePlaceholder":90},[59,2100,2101,2103,2106,2108,2110],{"class":61,"line":483},[59,2102,400],{"class":65},[59,2104,2105],{"class":69}," expected_header ",[59,2107,406],{"class":100},[59,2109,387],{"class":260},[59,2111,249],{"class":108},[59,2113,2114,2117,2119],{"class":61,"line":499},[59,2115,2116],{"class":69},"                expected_header ",[59,2118,101],{"class":100},[59,2120,2121],{"class":69}," header\n",[59,2123,2124,2126,2128,2130,2132,2134,2136,2138],{"class":61,"line":515},[59,2125,441],{"class":69},[59,2127,101],{"class":100},[59,2129,355],{"class":69},[59,2131,168],{"class":108},[59,2133,450],{"class":104},[59,2135,109],{"class":108},[59,2137,455],{"class":104},[59,2139,122],{"class":108},[59,2141,2142,2144,2146,2148,2150,2152],{"class":61,"line":520},[59,2143,463],{"class":69},[59,2145,168],{"class":108},[59,2147,468],{"class":104},[59,2149,109],{"class":108},[59,2151,473],{"class":104},[59,2153,122],{"class":108},[59,2155,2157,2160,2162,2165,2168],{"class":61,"line":2156},28,[59,2158,2159],{"class":65},"            elif",[59,2161,403],{"class":69},[59,2163,2164],{"class":100},"!=",[59,2166,2167],{"class":69}," expected_header",[59,2169,249],{"class":108},[59,2171,2173,2175,2177,2179,2182,2184],{"class":61,"line":2172},29,[59,2174,2079],{"class":159},[59,2176,109],{"class":108},[59,2178,113],{"class":112},[59,2180,2181],{"class":116},"  Skipped file with different header",[59,2183,113],{"class":112},[59,2185,122],{"class":108},[59,2187,2189],{"class":61,"line":2188},30,[59,2190,416],{"class":65},[59,2192,2194],{"class":61,"line":2193},31,[59,2195,91],{"emptyLinePlaceholder":90},[59,2197,2199,2201,2203,2205,2207],{"class":61,"line":2198},32,[59,2200,486],{"class":65},[59,2202,489],{"class":69},[59,2204,283],{"class":65},[59,2206,494],{"class":69},[59,2208,249],{"class":108},[59,2210,2212,2214,2216,2218,2220,2222],{"class":61,"line":2211},33,[59,2213,463],{"class":69},[59,2215,168],{"class":108},[59,2217,468],{"class":104},[59,2219,109],{"class":108},[59,2221,510],{"class":104},[59,2223,122],{"class":108},[59,2225,2227],{"class":61,"line":2226},34,[59,2228,91],{"emptyLinePlaceholder":90},[59,2230,2232,2234,2236,2238,2241,2243,2245,2247,2249],{"class":61,"line":2231},35,[59,2233,523],{"class":159},[59,2235,109],{"class":108},[59,2237,529],{"class":528},[59,2239,2240],{"class":116},"\"Merged files into ",[59,2242,536],{"class":535},[59,2244,556],{"class":104},[59,2246,548],{"class":535},[59,2248,113],{"class":116},[59,2250,122],{"class":108},[45,2252,2254],{"id":2253},"common-causes","Common causes",[14,2256,2257],{},"Many merge problems come from a few common mistakes:",[21,2259,2260,2262,2265,2267,2269],{},[24,2261,1585],{},[24,2263,2264],{},"Forgetting to skip the header row after the first file",[24,2266,1605],{},[24,2268,1727],{},[24,2270,2271,2272],{},"Opening CSV files without ",[28,2273,1308],{},[45,2275,2277],{"id":2276},"useful-debugging-prints","Useful debugging prints",[14,2279,2280],{},"If your script is not working as expected, these quick checks can help:",[50,2282,2284],{"className":52,"code":2283,"language":54,"meta":55,"style":55},"print(csv_files)\nprint(file_path)\nprint(header)\nprint(len(csv_files))\nprint(output_file.resolve())\n",[28,2285,2286,2296,2306,2316,2330],{"__ignoreMap":55},[59,2287,2288,2290,2292,2294],{"class":61,"line":62},[59,2289,523],{"class":159},[59,2291,109],{"class":108},[59,2293,117],{"class":104},[59,2295,122],{"class":108},[59,2297,2298,2300,2302,2304],{"class":61,"line":73},[59,2299,523],{"class":159},[59,2301,109],{"class":108},[59,2303,1966],{"class":104},[59,2305,122],{"class":108},[59,2307,2308,2310,2312,2314],{"class":61,"line":87},[59,2309,523],{"class":159},[59,2311,109],{"class":108},[59,2313,473],{"class":104},[59,2315,122],{"class":108},[59,2317,2318,2320,2322,2324,2326,2328],{"class":61,"line":94},[59,2319,523],{"class":159},[59,2321,109],{"class":108},[59,2323,539],{"class":159},[59,2325,109],{"class":108},[59,2327,117],{"class":104},[59,2329,183],{"class":108},[59,2331,2332,2334,2336,2338,2340,2342],{"class":61,"line":125},[59,2333,523],{"class":159},[59,2335,109],{"class":108},[59,2337,556],{"class":104},[59,2339,168],{"class":108},[59,2341,1650],{"class":104},[59,2343,1653],{"class":108},[14,2345,2346],{},"These tell you:",[21,2348,2349,2352,2355,2358,2361],{},[24,2350,2351],{},"which files were found",[24,2353,2354],{},"which file is being processed",[24,2356,2357],{},"what header was read",[24,2359,2360],{},"how many files matched",[24,2362,2363],{},"where the output file is being saved",[45,2365,2367],{"id":2366},"faq","FAQ",[1064,2369,2371],{"id":2370},"can-i-merge-csv-files-with-different-columns","Can I merge CSV files with different columns?",[14,2373,2374,2375,2377],{},"Yes, but this simple example assumes the same columns in every file. If columns differ, use ",[28,2376,1767],{}," and handle missing fields carefully.",[1064,2379,2381],{"id":2380},"why-is-the-header-repeated-more-than-once","Why is the header repeated more than once?",[14,2383,2384],{},"This usually happens when you write the first row from every file. Write the header only for the first non-empty file.",[1064,2386,2388],{"id":2387},"what-if-one-of-the-files-is-empty","What if one of the files is empty?",[14,2390,2391,2392,2394],{},"The example uses ",[28,2393,1152],{},", so empty files are skipped safely.",[1064,2396,2398],{"id":2397},"can-i-merge-csv-files-from-subfolders-too","Can I merge CSV files from subfolders too?",[14,2400,2401,2402,2405,2406,2408],{},"Yes. You can use ",[28,2403,2404],{},"input_folder.rglob(\"*.csv\")"," instead of ",[28,2407,1116],{}," to search recursively.",[45,2410,2412],{"id":2411},"see-also","See also",[21,2414,2415,2420,2425,2431,2437,2441,2445],{},[24,2416,2417],{},[618,2418,2419],{"href":1052},"How to read a CSV file in Python",[24,2421,2422],{},[618,2423,2424],{"href":1057},"How to write a CSV file in Python",[24,2426,2427],{},[618,2428,2430],{"href":2429},"\u002Fexamples\u002Fpython-csv-reader-example\u002F","Python CSV reader example",[24,2432,2433],{},[618,2434,2436],{"href":2435},"\u002Fexamples\u002Fpython-csv-writer-example\u002F","Python CSV writer example",[24,2438,2439],{},[618,2440,1379],{"href":1378},[24,2442,2443],{},[618,2444,1660],{"href":1659},[24,2446,2447],{},[618,2448,1741],{"href":1740},[14,2450,2451],{},"If this example helped you get started, the next step is to learn the task-focused guides for reading, writing, and troubleshooting CSV files.",[2453,2454,2455],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":55,"searchDepth":73,"depth":73,"links":2457},[2458,2459,2460,2461,2462,2468,2469,2470,2477,2478,2479,2480,2486],{"id":47,"depth":73,"text":48},{"id":571,"depth":73,"text":572},{"id":595,"depth":73,"text":596},{"id":625,"depth":73,"text":626},{"id":1061,"depth":73,"text":1062,"children":2463},[2464,2465,2466,2467],{"id":1066,"depth":87,"text":1069},{"id":1149,"depth":87,"text":1152},{"id":1221,"depth":87,"text":1224},{"id":1305,"depth":87,"text":1308},{"id":1382,"depth":73,"text":1383},{"id":1438,"depth":73,"text":1439},{"id":1494,"depth":73,"text":1495,"children":2471},[2472,2473,2474,2475,2476],{"id":1501,"depth":87,"text":1502},{"id":1570,"depth":87,"text":1571},{"id":1591,"depth":87,"text":1592},{"id":1663,"depth":87,"text":1664},{"id":1716,"depth":87,"text":1717},{"id":1744,"depth":73,"text":1745},{"id":2253,"depth":73,"text":2254},{"id":2276,"depth":73,"text":2277},{"id":2366,"depth":73,"text":2367,"children":2481},[2482,2483,2484,2485],{"id":2370,"depth":87,"text":2371},{"id":2380,"depth":87,"text":2381},{"id":2387,"depth":87,"text":2388},{"id":2397,"depth":87,"text":2398},{"id":2411,"depth":73,"text":2412},"Master python merge csv files example in our comprehensive Python beginner guide.","md",{},"\u002Fexamples\u002Fpython-merge-csv-files-example",{"title":5,"description":2487},"examples\u002Fpython-merge-csv-files-example","CtieVCCFatwDqX_RN-6tMJ_wYrs0V2ri6Hjzjq4n4aw",1777585476925]